应用程序关闭时如何执行代码?
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 将被删除。
我是大三学生,遇到问题
我在 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 将被删除。