在我的应用程序中,我有2个活动,A和B.活动A执行一些全局初始化,显示启动,连接到后端以获取一些用户信息等...然后启动活动B.而在活动B中,如果用户决定撤销应用程序的某些权限,则Android会终止整个过程并重新启动应用程序(Marshmallow行为),但它会启动活动B,从用户的角度来看是有意义的 - 它会将您带回到您离开的位置关闭。但是从未执行在活动A中完成的初始化。如何在重启时始终启动活动A(通过标记为清单中的LAUNCHER活动的方式)?
我可以在活动B中检测到这种情况并在那里执行所需的初始化,但是在真实应用程序中有很多活动,我希望在发生这种情况时不必在所有子活动中执行初始化。
答案 0 :(得分:1)
您可以在自定义应用程序中执行全局初始化,并配置清单文件以使用您的应用程序。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Called when the application is starting, before any activity, service
init();
}
private void init() {
android.util.Log.i("MyApplication", "initialize");
}
}
在AndroidManifest.xml文件中:
<application
android:name=".MyApplication"
...>
或者使用基本活动,让需要执行初始化的其他活动扩展基本活动。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isInitialized()) {
startActivity(new Intent(this, SplashActivity.class));
finish();
}
}
private boolean isInitialized() {
// your initialization state
return false;
}
}
答案 1 :(得分:-1)
有一个解决方法,您可以在活动B的onDestroy
方法中启动活动A.如果您为Intent
设置了适当的标记,则可以获得结果作为描述
以下一些代码:
// Activity B
@Override
protected void onDestroy() {
super.onDestroy();
Intent intent = new Intent(this, A.class);
// this flag will clear all activity and retain activity A
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
在我的测试中,这项工作。
在您的情况下,如果onDestroy
被调用,则应检查销毁时间,因为用户决定撤消应用程序的某些权限,