如何在Android重新启动应用时始终启动热门活动

时间:2017-02-08 23:09:49

标签: android

在我的应用程序中,我有2个活动,A和B.活动A执行一些全局初始化,显示启动,连接到后端以获取一些用户信息等...然后启动活动B.而在活动B中,如果用户决定撤销应用程序的某些权限,则Android会终止整个过程并重新启动应用程序(Marshmallow行为),但它会启动活动B,从用户的角度来看是有意义的 - 它会将您带回到您离开的位置关闭。但是从未执行在活动A中完成的初始化。如何在重启时始终启动活动A(通过标记为清单中的LAUNCHER活动的方式)?

我可以在活动B中检测到这种情况并在那里执行所需的初始化,但是在真实应用程序中有很多活动,我希望在发生这种情况时不必在所有子活动中执行初始化。

2 个答案:

答案 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被调用,则应检查销毁时间,因为用户决定撤消应用程序的某些权限,