我的应用程序流程:活动A - >开放活动B
活动A为静态变量(变量 sState )设置值B需要创建的内容。
步骤1:活动B已经在前台。将其推入后台。
第2步:打开应用信息设置并撤消任何权限。
步骤3:从最近屏幕打开活动B,出现活动B并发生崩溃,因为sState未初始化
在我的Android监视器中,当拒绝权限时,我的应用程序的进程终止。
撤销应用许可时会发生什么? 所以,我已经知道使用静态变量并不是一个好选择。但如果我想在第3步中出现活动A而不是B.是否有任何解决方案?
答案 0 :(得分:0)
在应用程序运行时拒绝设备设置的任何权限时,应用程序将丢失所有静态变量。您应该使用saveInstanceState()来保存活动B中的静态值。
private static final String STATE_KEY_STATIC_VALUE = "state_key_static_value";
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(STATE_KEY_STATIC_VALUE, sState);
super.onSaveInstanceState(outState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
sState = savedInstanceState.getString(STATE_KEY_STATIC_VALUE);
}
或者您可以通过意图将值从A活动传递到B活动。如果您使用意图传递任何值,那么您的值将被自动保留。
并且当拒绝设备设置的许可时,将再次显示前台活动。无法显示其他活动。