原因是程序需要使用服务中的对象,所以本人的通过startService和bind混合启动。
问题来了,本人从任务列表中退出任务(也就是后台中清除任务),再次启动,fragment的commitAllowingStateLoss就会报错
问题来了,本人从任务列表中退出任务(也就是后台中清除任务),再次启动,fragment的commitAllowingStateLoss就会报错
11-03 17:38:48.993: E/AndroidRuntime(4231): FATAL EXCEPTION: main 11-03 17:38:48.993: E/AndroidRuntime(4231): java.lang.IllegalStateException: Activity has been destroyed 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.didi.activity.MainActivity.setMainUi(MainActivity.java:468) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.didi.activity.MainActivity.onLoninSuccess(MainActivity.java:1138) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.didi.activity.LoginManager$LoginTask.onPostExecute(LoginManager.java:156) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.didi.activity.LoginManager$LoginTask.onPostExecute(LoginManager.java:1) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.os.AsyncTask.finish(AsyncTask.java:631) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.os.AsyncTask.access$600(AsyncTask.java:177) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.os.Handler.dispatchMessage(Handler.java:99) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.os.Looper.loop(Looper.java:153) 11-03 17:38:48.993: E/AndroidRuntime(4231): at android.app.ActivityThread.main(ActivityThread.java:5297) 11-03 17:38:48.993: E/AndroidRuntime(4231): at java.lang.reflect.Method.invokeNative(Native Method) 11-03 17:38:48.993: E/AndroidRuntime(4231): at java.lang.reflect.Method.invoke(Method.java:511) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 11-03 17:38:48.993: E/AndroidRuntime(4231): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 11-03 17:38:48.993: E/AndroidRuntime(4231): at dalvik.system.NativeStart.main(Native Method) 11-03 17:38:48.993: E/AndroidRuntime(4231): at Android.MODEL(Witsgo) 11-03 17:38:48.993: E/AndroidRuntime(4231): at Android.VERSION(4.2.1) 11-03 17:38:48.993: E/AndroidRuntime(4231): at Android.FINGERPRINT(alps/V6/V6:4.2.1/JOP40D/1374120644:user/test-keys)
当本人把后台服务彻底清楚的时候,重复操作就不会报错,但本人具体不知道错误的问题在那里、
解决方案
40
原因:原因是你用了Bound Service 和 Start Service两种方法启动了Service。
假如只是Bound Service是没有问题的,原因是绑定它的Activity销毁时,Service也就销毁了。
但是,当你用Start Service时,启动它的Activity销毁时,Service是不会跟着一起销毁的,而是一直在后台运行着。
所以现在的问题就是,你在Start Service中用到了已经被destroy的Activity中的东西,所以。
ps:以上是个人理解而已。建议加强Activity中Service的管理,如当Activity销毁时,也要显示调用stopService()终止Service。
或是Service本身调用stopSelf()终止自身。
假如只是Bound Service是没有问题的,原因是绑定它的Activity销毁时,Service也就销毁了。
但是,当你用Start Service时,启动它的Activity销毁时,Service是不会跟着一起销毁的,而是一直在后台运行着。
所以现在的问题就是,你在Start Service中用到了已经被destroy的Activity中的东西,所以。
ps:以上是个人理解而已。建议加强Activity中Service的管理,如当Activity销毁时,也要显示调用stopService()终止Service。
或是Service本身调用stopSelf()终止自身。