You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何保存当前壁纸分类以在Gif活动结束后返回

解决Gif动画Activity结束后返回对应壁纸分类页面的问题

要搞定这个返回分类页面的问题,核心就是把用户当前所在的分类信息妥善保存好,确保返回时能精准恢复,还要考虑到Activity被系统回收的极端情况,下面一步步来实现:

1. 给WallpapersActivity加个「状态备份」(应对系统回收)

有时候后台的WallpapersActivity会因为内存不足被系统干掉,这时候再返回就需要重新恢复分类信息。我们可以通过onSaveInstanceState来备份当前分类:

首先在WallpapersActivity里定义全局变量存当前分类:

private String currentCategory;

然后在onCreate方法里,优先从备份的状态里恢复分类,没有的话再从Intent里拿:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wallpapers);

    // 恢复或获取当前分类
    if (savedInstanceState != null) {
        currentCategory = savedInstanceState.getString("KEY_CURRENT_CATEGORY");
    } else {
        Intent intent = getIntent();
        currentCategory = intent.getStringExtra("category");
    }

    // 后续的toolbar标题、数据库引用初始化等,都用这个currentCategory变量
    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(currentCategory);
    setSupportActionBar(toolbar);
    // ... 其他原有代码(比如dbWallpapers的初始化,把原来的category替换成currentCategory)
}

接着重写onSaveInstanceState,把当前分类备份到Bundle里:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("KEY_CURRENT_CATEGORY", currentCategory);
}

2. 启动Gif Activity时带上分类信息

在WallpapersActivity里启动Gif展示页面的时候,把当前分类通过Intent传过去,这样Gif页面就知道要返回哪个分类了:

// 示例:假设是在壁纸点击事件里启动Gif Activity
Intent gifIntent = new Intent(WallpapersActivity.this, GifDisplayActivity.class);
gifIntent.putExtra("KEY_TARGET_CATEGORY", currentCategory); // 把当前分类传过去
startActivity(gifIntent);

3. Gif动画结束后精准返回

当Gif的3秒动画结束后,直接调用finish()就能回到栈里原来的WallpapersActivity(因为启动Gif页面时没有清除任务栈,WallpapersActivity还在栈里躺着呢):

// 在Gif Activity的动画结束回调里执行
private void onGifAnimationDone() {
    // 直接结束当前Activity,自动回到之前的WallpapersActivity
    finish();
}

要是担心WallpapersActivity已经被系统回收了,也可以在Gif页面里主动启动WallpapersActivity并传分类,同时设置栈标记避免重复创建实例:

private void onGifAnimationDone() {
    String targetCategory = getIntent().getStringExtra("KEY_TARGET_CATEGORY");
    Intent backIntent = new Intent(this, WallpapersActivity.class);
    backIntent.putExtra("category", targetCategory);
    // 清除WallpapersActivity之上的所有页面,复用已存在的实例
    backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(backIntent);
    finish();
}

额外小提醒

  • 别给WallpapersActivity设置singleTask或singleInstance的启动模式,不然会打乱任务栈结构,导致返回逻辑出问题。
  • 你当前代码里toolbar的返回按钮是跳转到HomeActivity,这个逻辑没问题(用户点击toolbar返回键回到首页),不会影响Gif页面返回WallpapersActivity的流程。

内容的提问来源于stack exchange,提问作者Lincoln Moreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:56