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

问题描述 投票:0回答:3

我是一名初中生,遇到问题。

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

关闭应用程序后是否可以执行代码?

编辑

这是我的代码,感谢@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();
            }
        }
    };
}
}
android realm android-lifecycle
3个回答
0
投票

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


0
投票

我认为最简单的解决方案是在您的应用程序类中使用计数器和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
                }
            }
        });

希望这会有所帮助。


0
投票

不确定这是否是您要寻找的东西,但这也许会有所帮助。

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

© www.soinside.com 2019 - 2024. All rights reserved.