我跟着this每隔5分钟运行一次服务
直到现在它的工作正常..但是我在TimeDisplay
中添加了一个Intent for Next服务但它的工作正常仅在第一次但是第二个Activity没有运行每30秒......它只有在首次运行中工作..
这是MyService
public class ServMain1 extends Service {
private static final String TAG = "ServMain1";
public static final int notify = 30000;
private Handler mHandler = new Handler();
private Timer mTimer = null;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
if (mTimer != null) // Cancel if already existed
mTimer.cancel();
else
mTimer = new Timer(); //recreate new
mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer.cancel(); //For Cancel Timer
Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
}
//class TimeDisplay for handling task
class **TimeDisplay** extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
// display toast
Toast.makeText(ServMain1.this, "ServMain1 : Service is running", Toast.LENGTH_SHORT).show();
startService(new Intent(ServMain1.this, ServMain2.class));
}
});
}
}
}
此处TimeDisplay
我正在使用此功能启动第二项服务startService(new Intent(ServMain1.this, ServMain2.class));
我怎样才能为每一个30 Seconds
祝酒。但是,除了那个吐司,我正在使用意图不起作用......
它仅在第一次工作......但我正在为每个30seconds
任何人都可以建议我如何使用这种活动
答案 0 :(得分:1)
即使多次致电startService
,服务也只会运行一次。
如果你想继续在你的处理程序中重新启动服务,你需要首先检查它是否已经运行,如果它已经在运行则终止它并调用startService post。
您可以使用
检查服务是否正在运行private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
在你的处理程序中进行这些更改
mHandler.post(new Runnable() {
@Override
public void run() {
// display toast
Toast.makeText(ServMain1.this, "ServMain1 : Service is running", Toast.LENGTH_SHORT).show();
if(!isMyServiceRunning(ServMain2.class)){
startService(new Intent(ServMain1.this, ServMain2.class));
} else{
stopService(ServMain2.class);
startService(new Intent(ServMain1.this, ServMain2.class));
}
}
});