我的android IntentService出现问题。当我第一次打开应用程序时,该服务会从配置文件活动中按意图启动,并且将从该服务中获取数据。如果我切换到其他活动,然后返回服务仍在运行,那就可以了。
但是,如果按回去,以便活动结束并置于后台,则该服务仍在工作,因为该应用程序在后台,但是如果我将其返回到前台,则该服务将停止。我不知道为什么。波纹管是我的代码,请帮忙。
我已经阅读了几次活动生命周期,但仍然不明白为什么会这样。
奇怪的是,当MainActivity返回运行状态时,Service在停止之前再接收数据一次。服务没有崩溃。
服务
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
无限循环。它将阻止所有其他传入请求。从文档中:
所有请求都在单个工作线程上处理-它们可能花费必要的时间(并且不会阻塞应用程序的主循环),但是一次仅处理一个请求。
您的Service可能仍会愉快地运行,它只是不处理新的请求,因为您的旧请求仍在无限循环中进行处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句