检测应用程序从不同导航状态恢复的状态(Android)。

5
我希望在应用程序从不同入口重新启动/创建时记录其状态。
  • 应用程序从应用抽屉中打开
  • 应用程序从通知中打开
  • 应用程序从打开的应用中恢复(长按主页键)
  • 应用程序从其他屏幕中恢复
我知道可以通过生成基本活动并覆盖恢复/暂停事件来跟踪它,但是我的应用程序中有大量的活动存在。所以有没有一种简短的方法来获取应用程序的状态?
我考虑创建一个服务并持续检查当前运行的任务,但只有当我发现一种方法可以在我的活动处于可见状态时才能使用这种方法来运行该服务。(对于每个活动都绑定服务对我来说不切实际)
1个回答

1
您的建议解决方案听起来不错:

public class YourBaseActivity extends Activity {

    @Override
    protected void onResume() {
        super.onResume();

        ActivityManager mgr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> tasks = mgr.getRunningTasks(1);

        tasks.get(0).topActivity.getClassName();

        //Do what you need to do with it...
    }
}

让你的所有活动都延伸到这个上面,而不是活动为你工作


编辑 另一种方法:

创建自己的应用程序类并实现Application.ActivityLifecycleCallbacks,以下是代码的工作示例:

public class ApplicationTest extends Application implements   Application.ActivityLifecycleCallbacks {
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
    }

    @Override
    public void onActivityPaused(Activity activity) {
    }

    @Override
    public void onActivityResumed(Activity activity) {
        Log.d("testing", "onActivityResumed");
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }

    @Override
    public void onActivityStarted(Activity activity) {
    }

    @Override
    public void onActivityStopped(Activity activity) {
    }
}

并在你的清单文件中引用这个类:

<application
    ...
    android:name="com.example.testing.ApplicationTest" >

1
Guillermo,我的朋友,这就是我们所知道的,我们不想这样做,请提供其他解决方案。这是不可接受的。 - MKJParekh
嗨@MKJParekh,我已经用另一种解决方案编辑了我的答案,请检查一下。 - Guillermo Merino
当我们在应用程序内导航时,回调函数是否被调用?如果我启动一个活动,那么另一个活动是否会收到onActivityPaused和onActivityResumed的回调? - Stephane Mathis
@StephaneMathis 是的,我已经测试了两个活动,它可以正常工作。 - Guillermo Merino
你有创建/销毁和暂停/恢复的回调函数,它们都被正确触发。 - Guillermo Merino
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接