繁体   English   中英

通过Android重新启动应用程序时如何始终启动热门活动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM