【发布时间】:2014-07-05 19:06:08
【问题描述】:
在一个非常具体的场景之前,我的应用程序运行良好。
- 我打开对话框。
- 我终止了应用程序(使用 SystemTuner)
- 我在被杀后恢复应用。
然后我的应用程序没有运行,LogCat 中有以下消息。
07-05 20:45:36.469: W/ResourceType(4866): No package identifier when getting value for resource number 0x00000000
07-05 20:45:36.469: W/dalvikvm(4866): threadid=1: thread exiting with uncaught exception (group=0x40a7b390)
07-05 20:45:36.469: E/AndroidRuntime(4866): FATAL EXCEPTION: main
07-05 20:45:36.469: E/AndroidRuntime(4866): java.lang.RuntimeException: Unable to start activity ComponentInfo{petersoft.petermemoflashcards/petermemo.android.gui.activities.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1964)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1989)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread.access$600(ActivityThread.java:126)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1155)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.os.Looper.loop(Looper.java:137)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread.main(ActivityThread.java:4482)
07-05 20:45:36.469: E/AndroidRuntime(4866): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 20:45:36.469: E/AndroidRuntime(4866): at java.lang.reflect.Method.invoke(Method.java:511)
07-05 20:45:36.469: E/AndroidRuntime(4866): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
07-05 20:45:36.469: E/AndroidRuntime(4866): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
07-05 20:45:36.469: E/AndroidRuntime(4866): at dalvik.system.NativeStart.main(Native Method)
07-05 20:45:36.469: E/AndroidRuntime(4866): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.content.res.Resources.getValue(Resources.java:1041)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2191)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.content.res.Resources.getLayout(Resources.java:880)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-05 20:45:36.469: E/AndroidRuntime(4866): at petermemo.android.gui.dialogs.PMDialogFragment.onCreateView(PMDialogFragment.java:51)
07-05 20:45:36.469: E/AndroidRuntime(4866): at petermemo.android.gui.dialogs.DialogCardStats.onCreateView(DialogCardStats.java:61)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:552)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.Activity.performStart(Activity.java:4475)
07-05 20:45:36.469: E/AndroidRuntime(4866): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1937)
07-05 20:45:36.469: E/AndroidRuntime(4866): ... 11 more
有部分对话代码:
public abstract class PMDialogFragment extends DialogFragment {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(layoutId, container);
return view;
}
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
}
以下行导致异常:
View view = inflater.inflate(layoutId, container);
还请注意,正如我所说,如果应用程序没有被杀死,它完全可以正常工作。即使它被隐藏和恢复,也没有问题。
我不知道问题的原因是什么...请帮助。 :)
稍后添加:
我想知道这可能与 layoutId 等于 0 的事实有关。我之前没有粘贴整个代码,但是子类以以下方式使用类PMDialogFragment:
public class DialogCardStats extends PMDialogFragment {
public static DialogCardStats newInstance (Fragment fragment, String fragmentTag, InterfaceCallback.Callback callback, Bundle bundle) {
FragmentManager fm = fragment.getFragmentManager();
DialogCardStats dialogCardStats = new DialogCardStats();
dialogCardStats.setArguments(bundle);
dialogCardStats.layoutId = R.layout.dialog_card_stats;
dialogCardStats.registerCallbackListener(callback);
dialogCardStats.show(fm, fragmentTag);
return dialogCardStats;
}
当我的对话框使用 newInstance 显示时,layoutId 设置正确。但是,当它被 Android 自动恢复时,layoutId 为零。我应该如何保留重要的类字段?
【问题讨论】:
-
你为什么要“杀死”你的应用程序?
-
测试当 Android 杀死它时会发生什么。那么它会正确恢复吗?而我观察到的,没有。
-
Android 不会“杀死”应用程序 - 它会彻底关闭它们。我不知道 SystemTuner 是什么,但如果它是一个任务杀手,那么这可能是你的问题。
-
我刚刚扩展了问题描述。我的印象是它与未正确保存对话框状态有关。
标签: java android android-dialogfragment android-inflate