Art*_*ent 5 android nullpointerexception onresume android-package-managers
PackageManager.DONT_KILL_APP的API文档说:
设置此项时要小心,因为更改组件状态会使包含应用程序的行为无法预测.
不幸的是,他们没有详细说明不可预测的行为意味着什么.
在我的应用程序中,我正在切换活动的启用状态.首先,服务启用活动并启动它:
getPackageManager().setComponentEnabledSetting(
new ComponentName(MyService.this.getApplicationContext(),
MyActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
final Intent launchIntent = new Intent(context, MyActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(launchIntent);
Run Code Online (Sandbox Code Playgroud)
如果(单顶)活动再次开始或被破坏,它会将自己设置为再次禁用:
@Override
protected void onDestroy() {
log.d("ON DESTROY");
super.onDestroy();
getPackageManager().setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
@Override
protected void onNewIntent(Intent intent) {
if (someCondition) {
getPackageManager().setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
startActivity(i);
finish();
return;
}
super.onNewIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
通常情况下一切正常,但有时对象是空的,在onResume()
其中创建onCreate()
并且不触及任何其他地方.我无法在调试器中重建这个问题,但我得到了许多带有NullPointerExceptions的错误报告,onResume()
如果onCreate()
之前真的被调用过,那是不可能的.
一个简单的例子是:
private String s;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
s = new String("");
...
}
@Override
protected void onResume() {
super.onResume();
...
s.equals(""); // rarely causes NullPointerException
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这可能是不可预测的行为PackageManager.DONT_KILL_APP
吗?或者有人知道如何发生这种情况吗?
归档时间: |
|
查看次数: |
1297 次 |
最近记录: |