我正在使用IntentService
来呼叫网络服务。
我如何致电启动意向服务:
if (isMyConServiceRunning(TaskService.class,context) == false) {
Log.d(TAG,"STARTING TaskService");
context.startService(TasksIntentUploadDownload);
}
isMyConServiceRunning方法:
private static boolean isMyConServiceRunning(Class<?> serviceClass,Context context)
{
try {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().toLowerCase(Locale.ENGLISH).contains(service.service.getClassName().toLowerCase(Locale.ENGLISH))) {
return true;
}
}
}
catch(Exception e)
{}
return false;
}
isMyConServiceRunning
始终返回false
(服务未运行),因此服务正在多次启动但我注意到当我覆盖方法OnStartCommand
并放置webservice调用时在OnStartCommand
而不是OnHandleIntent
并且OnStartCommand
返回START_STICKY
,然后isMyConServiceRunning
会识别该服务正在运行。
在OnStartCommand
中运行任务是不是很糟糕?
如果是,我如何修复多次调用以运行IntentService
?
答案 0 :(得分:0)
更好的方法是:
在您的服务类中:
private void sendMessageStart() {
Intent intent = new Intent("Service-Started");
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
private void sendMessageStop() {
Intent intent = new Intent("Service-Stopped");
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
在您想要检查服务是否正在运行的类中:
private BroadcastReceiver mMessageReceiverStart = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
}
};
private BroadcastReceiver mMessageReceiverStop = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
}
}
};