![](/img/trans.png)
[英]Unable to start activity ComponentInfo{project} java.lang.IndexOutOfBoundsException: Index:
[英]Android Java - Unable to destroy activity: IndexOutOfBoundsException
每當我關閉應用程序時,都會出現以下錯誤:
FATAL EXCEPTION: main
Process: uk.cal.codename.projectnedry, PID: 24450
java.lang.RuntimeException: Unable to destroy activity {uk.cal.codename.projectnedry/uk.CompanyScope.CompanyNavigationActivity.CompanyNavigationActivity}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4203)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.set(ArrayList.java:427)
at android.support.v4.app.FragmentManagerImpl.makeInactive(FragmentManager.java:1662)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1452)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:2951)
at android.support.v4.app.FragmentController.dispatchDestroy(FragmentController.java:271)
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:390)
at android.support.v7.app.AppCompatActivity.onDestroy(AppCompatActivity.java:209)
at uk.genericmodelviewpresenter.GenericMvpActivity.onDestroy(GenericMvpActivity.java:96)
at uk.CompanyScope.CompanyNavigationActivity.CompanyNavigationActivity.onDestroy(CompanyNavigationActivity.java:523)
at android.app.Activity.performDestroy(Activity.java:6881)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1153)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4190)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
接觸我編寫的代碼的唯一部分是:
CompanyNavigation活動:
@Override
public void onDestroy() {
super.onDestroy();
getSpecificImpOfGenericPresenter().closeRealm();
}
及其超類GenericMvpActivity:
@Override
public void onDestroy() {
super.onDestroy();
//Unbind Butterknife bindings
if(mUnbinder!=null) {
mUnbinder.unbind();
}
}
通過查看stacktrace,我可以看到它與片段相關,但這在Android代碼中。 該CompanyNavigationActivity有時確實包含許多片段, 但是無論是否創建它們都會發生錯誤 。
關於原因是什么?
編輯1
presenter類中的closeRealm方法僅刪除監聽器並關閉realm的presenters實例。
public void closeRealm() {
this.mRealmDatabase.getInstance().removeAllChangeListeners();
this.mRealmDatabase.close();
}
編輯2
經過進一步測試,似乎如果我在CompanyNavigationActivity中的viewpager中創建片段, 則不會發生此錯誤。 它似乎僅在活動中不存在任何片段時發生。
編輯3
我將其范圍縮小為一種特定的方法,該方法正在啟動前台服務。 更具體地說,startService調用。
/**
* If foreground location service is not running, start it
*/
private void startLocationService() {
if (!ForegroundLocationService.IS_SERVICE_RUNNING) {
Intent service = new Intent(getSpecificImpOfGenericView().getApplicationContext(), ForegroundLocationService.class);
service.setAction(ServiceConstants.ACTION.STARTFOREGROUND_ACTION);
ForegroundLocationService.IS_SERVICE_RUNNING = true;
getSpecificImpOfGenericView().getApplicationContext().startService(service);
}
}
當然,前台請求應該作為單獨的服務保留在前台中,並且不影響啟動它們的活動的破壞嗎?
您應該在super.onDestroy();
之前完成所有工作super.onDestroy();
在銷毀實例特定資源可能依賴的超類資源之前,請先銷毀實例特定資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.