Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 所有活动开始之前和停止之后的侦听器?_Java_Android - Fatal编程技术网

Java 所有活动开始之前和停止之后的侦听器?

Java 所有活动开始之前和停止之后的侦听器?,java,android,Java,Android,如果我想在任何活动开始之前和所有活动停止之后运行一些脚本,我会在android中把这样的侦听器放在哪里 我考虑过把它放在Android的应用程序类中,简单地把方法放在它的onCreate和onSaveInstanceState中,但我不确定它们在所有活动之前和之后都会被调用,不幸的是,在应用程序类中,当应用程序停止时没有回调,但我认为您可以尝试以下代码: > 已更新: 申请类别代码: public class MyApplication extends Application { @O

如果我想在任何活动开始之前和所有活动停止之后运行一些脚本,我会在android中把这样的侦听器放在哪里


我考虑过把它放在Android的
应用程序类中,简单地把方法放在它的
onCreate
onSaveInstanceState
中,但我不确定它们在所有活动之前和之后都会被调用,不幸的是,在应用程序类中,当应用程序停止时没有回调,但我认为您可以尝试以下代码:

>

已更新: 申请类别代码:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        startService(new Intent(this, Monitor.class));
    }
}
后台服务代码:

public class Monitor extends Service implements Application.ActivityLifecycleCallbacks {

    private static final String TAG = "Monitor";

    int mActivitiesCount = 1; // At the moment when service started, the main Activity is already opened

    public Monitor() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        getApplication().registerActivityLifecycleCallbacks(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        getApplication().unregisterActivityLifecycleCallbacks(this);
        super.onDestroy();
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {
        mActivitiesCount++;
        Log.d(TAG, "onActivityCreated: count: " + mActivitiesCount);
    }

    @Override
    public void onActivityStarted(Activity activity) {

    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {

    }

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

    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        mActivitiesCount--;
        Log.d(TAG, "onActivityDestroyed: count: " + mActivitiesCount);
        if (mActivitiesCount == 0) {
            Log.d(TAG, "All activities was destroyed");
            // do something
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

最好描述一下你为什么想要这种行为,以确保你不会成为受害者-也许有一种更简单、更有效的方法来实现你想要的行为。@VinceEmigh我正在操纵多个模型
User
Comment
Post
-所有这些都包含简单的自动递增长ID和一些基本属性(例如int age、String text)。因为我有多个活动访问它们——一个查看配置文件活动和一个修改配置文件活动——我想创建一个总体类,将所有需要的模型加载到某个静态类或修改的
应用程序
类。在运行时,所有活动都会从该类中操作这些对象——保持所有人的同步并避免昂贵的IO。然后当所有活动都关闭时,它会保存用于加载,您可以实施
按需加载
,而对于保存
避免昂贵的IO
,这听起来像是过早的优化,因为android无法保证总是调用onPause/onDestroy方法,并且会导致数据丢失。我测试了它,这不起作用,因为HashSet在
onCreate
期间重置,因为我们又回到了原点。如果应用程序在所有活动之前都存在,并且在所有活动之前都不会消亡,那么您的解决方案就可以工作them@Alan,您可以在应用程序的“onCreate()”方法中启动空的“粘性”后台服务,并在所有活动被销毁时停止它。这将允许应用程序在没有任何运行活动的情况下保持活动状态。您能否提供一个示例/伪代码/或一些关于如何执行此操作的链接,以便我接受您的回答?@Alan,请尝试更新的代码。如果它不起作用,请告诉我。