android服务和活动生命周期?

android服务和活动生命周期?,android,android-service,android-lifecycle,Android,Android Service,Android Lifecycle,我的android IntentService有问题。当我第一次打开应用程序时,该服务通过配置文件活动的意图启动,并从该服务获取数据。若我切换到其他活动,然后返回服务仍在运行,那个就可以了 但是,如果您按back键,使活动完成并放在后台,服务仍在工作,因为应用程序在后台,但如果我将其返回前台,服务将停止。我不知道为什么。下面是我的代码,请帮忙 我已经读了《活动生命周期》好几遍了,但仍然不明白为什么会发生这种情况 奇怪的是,当MainActivity恢复到运行状态时,服务会在停止之前再接收一次数据

我的android IntentService有问题。当我第一次打开应用程序时,该服务通过配置文件活动的意图启动,并从该服务获取数据。若我切换到其他活动,然后返回服务仍在运行,那个就可以了

但是,如果您按back键,使活动完成并放在后台,服务仍在工作,因为应用程序在后台,但如果我将其返回前台,服务将停止。我不知道为什么。下面是我的代码,请帮忙

我已经读了《活动生命周期》好几遍了,但仍然不明白为什么会发生这种情况

奇怪的是,当MainActivity恢复到运行状态时,服务会在停止之前再接收一次数据。服务没有崩溃

服务

public class SomeService extends IntentService
{
    public static final String extra = "someData";

    public SomeService()
    {
        super(SomeService.class.getSimpleName());
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {
        Log.e("SomeService", "starting service");

        while (true)
        {
            SomeData data = Api.getNewSocketData();

            //Broadcast data when received to update the view
            Intent broadcastData = new Intent();
            broadcastData.setAction(dataBroadcastReceiver.ACTION_DATA_RECEIVED);
            broadcastData.addCategory(Intent.CATEGORY_DEFAULT);
            broadcastData.putExtra(extra, " ");
            sendBroadcast(broadcastData);

            Log.e("SomeService", "received from socket");
        }

    }


}
接收器

public class dataBroadcastReceiver extends BroadcastReceiver
{
    public final static String ACTION_DATA_RECEIVED = "net.bitstamp.intent.action.ACTION_SOMEDATA_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent)
    {

        Log.e("receiver", "data received");
    }
}
主要活动

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

    unregisterReceiver(dataBroadcastReceiver);
}

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

    IntentFilter intentFilter = new IntentFilter(dataBroadcastReceiver.ACTION_DATA_RECEIVED);
    intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
    dataBroadcastReceiver = new dataBroadcastReceiver();
    registerReceiver(dataBroadcastReceiver, intentFilter);

    Intent someService = new Intent(this, SomeService.class);
    startService(someService);

}

我真的需要帮助。谢谢

您不想在无限循环中启动
IntentService
。它将阻止所有其他传入请求。从文件中:

所有请求都在一个工作线程上处理——它们可能需要花费必要的时间(并且不会阻塞应用程序的主循环),但一次只处理一个请求


您的服务可能仍在愉快地运行,它只是没有处理您的新请求,因为您的旧请求仍在无限循环中处理。

检查logcat,服务是否崩溃?不,它不是。。。onHandleEvent事件未执行…我不知道它是否相关,但在onResume()中调用startService()之前,您应该检查服务是否已在运行。您正在排队等待更多无法执行的请求。onHandleIntent()调用是如何完成的?检查在服务上调用onDestroy()的时间,这可能会有所帮助。那么我应该怎么做?当我从套接字获取数据时,请结束服务并再次运行它?这实际上取决于服务的用途。如果希望该服务保持与web服务的连接并广播新数据,请使用您自己的线程,而不是
IntentService
使用的线程。