应用程序关闭时如何执行代码?

How to execute code when application is closing?

我是大三学生,遇到问题

我在 Android (Java) 上使用 Realm,我想在关闭时删除本地 BDD 中的数据。我总是在开始一个新的之前完成我的 activity 并且我永远不知道在用户决定关闭应用程序之前的最后一个 activity 是什么。

有没有办法在应用关闭时执行代码?

编辑

这是我的代码,感谢@Mohanad

public class ApplicationClass extends Application {

@Override
public void onCreate() {
    super.onCreate();

    Realm.init(this);

    RealmConfiguration mRealmConfig = new RealmConfiguration.Builder()
            .schemaVersion(1)
            .migration(new RealmMigrations())
            .inMemory()
            .build();

    Realm.setDefaultConfiguration(mRealmConfig);

    registerActivityLifecycleCallBack();

    Log.i("XXX", "I've been created");

}

public void registerActivityLifecycleCallBack() {

    ActivityLifecycleCallbacks mActivity = new ActivityLifecycleCallbacks() {
        int mCounter = 0;

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            mCounter++;
            Log.i("XXX", "I'm called again and again");
        }

        @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 outState) {

        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            mCounter--;

            if (mCounter == 0) {
                Realm mRealm  = Realm.getDefaultInstance();

                mRealm.close();
            }
        }
    };
}
}

使用 onDestroy() 方法并在其中编写代码。

我认为最简单的解决方案是在您的应用程序 class 中使用计数器和 ActivityLifecycleCallbacks,如下所示:

    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            int activityCounter = 0;

            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activityCounter ++;
            }

            @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) {
                activityCounter--;
                if (activityCounter == 0) {
                    //last activity on destroy
                }
            }
        });

希望这会有所帮助。

不确定这是否是您要查找的内容,但也许这对您有所帮助。

在您的 onDestroy 中检查 activity 的 isTaksRoot() -> 方法以查看它是否是任务根。 isTaskRoot docs

步骤:

1.) 使用inMemory()配置

RealmConfiguration config = new RealmConfiguration.Builder()
                                    .inMemory()
                                    .build();

2.) 在Application.onCreate()中调用realm.init(),照常设置默认配置,之后,initialize/close Realm 是这样的:

public class MyActivity extends AppCompatActivity {
    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        realm = Realm.getDefaultInstance();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }
}

现在,当 Realm 在所有线程上关闭并且您退出应用程序(或应用程序被终止)时,Realm 将被删除。