在这种情况下,为什么我收到“服务已被泄露”错误?

时间:2014-02-26 07:07:49

标签: android

/**********************************************/
// MyActivity extends Activity
/**********************************************/
...
Intent sendIntent = new Intent(getApplicationContext(), ServiceThread_Send.class);
sendIntent.putExtra(ServiceThread_Send.KEY_MESSAGE, message);
sendIntent.putExtra(ServiceThread_Send.KEY_RECEIVER_PHONE_NUMBER, receiver);
startService(sendIntent);

// I won't get the error message if I don't call the following method.
finish();

/**********************************************/
// ServiceThread_Send extends IntentService
/**********************************************/

protected void onHandleIntent(Intent intent)
{
    ...
    new SendingThread(receiverPhoneNumber, textMessage, this).start();
}

/**********************************************/
// SendingThread extends Thread
/**********************************************/
public void run()
{
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE|Context.BIND_ABOVE_CLIENT);
}

这就是我得到的:

  

ServiceThread_Send已泄漏最初绑定的ServiceConnection SendingThread $ 1 @ 419a18d0

  1. 为什么我收到此错误。
  2. 为什么我被告知我正在泄漏'线程'?这个错误不是特定的 '服务'?

2 个答案:

答案 0 :(得分:0)

如果您将其作为IntentService,那么启动另一个线程的需求是什么。 Intent服务已经在工作线程中工作,所以不需要在那里启动另一个线程。 只是你的工作,当你在onHandleIntent有意图,然后意图服务将自己调用stopSelf

答案 1 :(得分:0)

我找到了答案:

因为我使用过IntentService,它会完成它的工作,然后自己调用selfStop()。结果,最初绑定在那里的任何服务都被泄露了。我所做的就是改变:

    bindService(...);

对此:

    getApplicationContext.bindService(...);

一切都像魅力一样。 ; - )