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