调用onDestroy

时间:2017-07-28 14:36:54

标签: java android android-fragments service android-lifecycle

我有一个非常简单的前台服务,如下所示,它只显示前景通知:

public class ForegroundLocationService extends Service {

    private final String TAG = this.getClass().getSimpleName();

    @Override
    public void onCreate() {
        super.onCreate();

        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.bullhorn_24dp);

        Notification notification = new NotificationCompat.Builder(this)
                .setContentTitle("Signed in")
                .setTicker("Signed into name123")
                .setContentText("You are broadcasting your location")
                .setSmallIcon(R.drawable.broadcast_notifcation)
                .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
                .setOngoing(true).build();

        startForeground(ServiceConstants.NOTIFICATION_ID.FOREGROUND_SERVICE, notification);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

我可以在我的应用程序中通过在我的活动中调用它来启动它:

Intent service = new Intent(this, ForegroundLocationService.class); 
startService(service);

按预期显示以下图像: Example of emulator

问题是当我通过按住手机主页按钮并关闭应用程序来关闭我的应用程序。调用活动的onDestroy()方法,但不是让前台服务运行并关闭应用程序,而是出现以下错误(并且前台服务停止):

FATAL EXCEPTION: main
  Process: uk.cal.codename.projectnedry, PID: 16495
  java.lang.RuntimeException: Unable to destroy activity {uk/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.demo.genericmodelviewpresenter.GenericMvp.GenericMvpActivity.onDestroy(GenericMvpActivity.java:100)
      at uk.CompanyScope.CompanyNavigationActivity.CompanyNavigationActivity.onDestroy(CompanyNavigationActivity.java:533)
      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) 

发生错误的行如下:

CompanyNavigationActivity.java:533'super.onDestroy();'

@Override
public void onDestroy() {
    getSpecificImpOfGenericPresenter().closeRealm();
    super.onDestroy();
}

GenericMvpActivity.java:100'super.onDestroy();'

@Override
public void onDestroy() {
    //Unbind Butterknife bindings
    if(mUnbinder!=null) {
        mUnbinder.unbind();
    }
    super.onDestroy();
}

然后它进入Android片段类。我不知道为什么这个前台服务会导致它启动的Activity的生命周期出现问题。如果我注释掉启动服务的调用,一切都正常运行。

关于服务如何以这种方式影响活动的任何想法?

编辑1

我的清单中列出的服务为:

<service android:name=".LocationService.ForegroundLocationService"
    android:icon="@drawable/bullhorn_24dp"
    android:label="Assemble sharing">
</service>

编辑2

演示者closeRealm方法如下所示,但是在Activity的onDestroy方法中对此进行注释会产生相同的错误。

public void closeRealm() {
    this.mRealmDatabase.getInstance().removeAllChangeListeners();
    this.mRealmDatabase.close();
}

0 个答案:

没有答案