![](/img/trans.png)
[英]Android: always launch start activity when app is destroyed and recreated
[英]How to always start top activity when app is restarted by Android
在我的应用程序中,我有2个活动A和B。活动A执行一些全局初始化,显示启动画面,连接到后端以获取一些用户信息等,然后启动活动B。在活动B中,如果用户决定撤消该应用程序的某些权限,Android终止了整个过程并重新启动该应用程序(棉花糖行为),但是它启动了活动B,从用户的角度来看这很有意义-它使您回到上次停止的位置。 但是,因此从未执行在活动A中完成的初始化。 如何强制活动A(在清单中标记为LAUNCHER活动)始终在重新启动时启动?
我可以在活动B中检测到这种情况并在那里执行所需的初始化,但是在实际的App中,有许多活动,当这种情况发生时,我不想在所有子活动中都进行初始化。
您可以在自定义应用程序中执行全局初始化,并配置清单文件以使用您的应用程序。
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;
}
}
解决方法是,可以在活动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
来检查销毁时间,因为用户决定从该应用撤消某些权限,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.