【问题标题】:android.os.deadobjectexception in service android服务android中的android.os.deadobjectexception
【发布时间】:2014-02-24 09:00:19
【问题描述】:

我有一个应用程序从服务中获取数据值(坐标),并且工作正常,但大约七八分钟后崩溃。

在 logcat 中出现了很多这样的消息:

02-24 09:50:35.761: E/RemoteException(6395): android.os.DeadObjectException

这些消息来自应用程序而不是服务,但我想那是因为服务失败了?

[更新]

对于 cmets,我更好地理解问题是由服务故障引起的,但我读了这个问题 How to fix android.os.DeadObjectException android X(类似于我的),但答案......让我有些困惑。

这是我的ondestroy():

@Override
public void onDestroy() {

 Toast.makeText(this, "Servicio destruido", Toast.LENGTH_SHORT).show();
 Log.d("SERVICEBOOT", "Servicio destruido");
 capture.control(0);

}

我如何知道哪个元素关闭了我的服务?

【问题讨论】:

  • 你调用的对象已经死亡,因为它的宿主进程已经不存在了。
  • 访问answer
  • 我会更新帖子

标签: java android service


【解决方案1】:

将此添加到服务类中。这将阻止应用程序崩溃。 'onTaskRemoved' 当应用从内存中移除时触发

@Override
    public void onTaskRemoved(Intent rootIntent){
        stopSelf();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        super.onTaskRemoved(rootIntent);
    }

 @Override
    public void onDestroy() {
        super.onDestroy();
//Your Runnable
        mRunnable=null;
    }

【讨论】:

  • 这里为什么需要Thread.sleep?谢谢!
【解决方案2】:

由于父进程已停止,您正在使用内存中不再存在的对象的实例。

【讨论】:

  • 我认为您的服务已停止,因为它绑定的 Activity 已被破坏。
  • 所以解决办法是在ActivityonDestroy停止服务?
  • 是的,如果您在活动完成后不需要它,否则您可以在 Destroy 上取消绑定服务并保持服务运行,但要访问服务实例,请记住将实例设为静态。
猜你喜欢
  • 2010-12-07
  • 2017-10-28
  • 2014-07-19
  • 2011-12-19
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
相关资源
最近更新 更多