Android 如果由于解析异常而被后退按钮销毁,应用程序会崩溃
Android app crashes if destroyed by back button because of Parse exception
在我的 onCreate()
方法中,我按照文档中的建议初始化了 Parse 库:
// Init Parse and enable Local Datastore.
ParseObject.registerSubclass(AlertObject.class);
Parse.enableLocalDatastore(this);
Parse.initialize(this, getString(R.string.parse_app_id),
getString(R.string.parse_client_key));
但是,如果我按下后退按钮(因此应用程序停止并销毁),然后通过从上次使用的应用程序菜单中单击它来恢复应用程序,它会崩溃并抛出以下异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.pro/my.app.MainActivity}: java.lang.IllegalStateException: `Parse#enableLocalDatastore(Context)` must be invoked before `Parse#initialize(Context)`
[...]
本质上,它建议在 initialize()
之前调用 enableLocalDatastore()
,实际上我就是这样做的。
当然,如果我重写 onBackPressed()
方法如下:
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
应用未被销毁,问题解决。但是,为什么我会在默认行为中得到该异常?
尝试将 Parse 初始化移动到应用程序 class 的 onCreate
方法。如果你没有它,你可以创建一个从 Application
延伸的 class,例如:
public class AppAplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ParseObject.registerSubclass(AlertObject.class);
Parse.enableLocalDatastore(this);
Parse.initialize(this, getString(R.string.parse_app_id), getString(R.string.parse_client_key));
}
}
并在 AndroidManifest.xml
文件中写入您正在使用自己的应用程序对象,将 android:name
属性添加到 <application>
标记。示例:
<application
android:name=".AppApplication"
>
在我的 onCreate()
方法中,我按照文档中的建议初始化了 Parse 库:
// Init Parse and enable Local Datastore.
ParseObject.registerSubclass(AlertObject.class);
Parse.enableLocalDatastore(this);
Parse.initialize(this, getString(R.string.parse_app_id),
getString(R.string.parse_client_key));
但是,如果我按下后退按钮(因此应用程序停止并销毁),然后通过从上次使用的应用程序菜单中单击它来恢复应用程序,它会崩溃并抛出以下异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.pro/my.app.MainActivity}: java.lang.IllegalStateException: `Parse#enableLocalDatastore(Context)` must be invoked before `Parse#initialize(Context)`
[...]
本质上,它建议在 initialize()
之前调用 enableLocalDatastore()
,实际上我就是这样做的。
当然,如果我重写 onBackPressed()
方法如下:
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
应用未被销毁,问题解决。但是,为什么我会在默认行为中得到该异常?
尝试将 Parse 初始化移动到应用程序 class 的 onCreate
方法。如果你没有它,你可以创建一个从 Application
延伸的 class,例如:
public class AppAplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ParseObject.registerSubclass(AlertObject.class);
Parse.enableLocalDatastore(this);
Parse.initialize(this, getString(R.string.parse_app_id), getString(R.string.parse_client_key));
}
}
并在 AndroidManifest.xml
文件中写入您正在使用自己的应用程序对象,将 android:name
属性添加到 <application>
标记。示例:
<application
android:name=".AppApplication"
>