我在service中写了一个函数,它在service启动时执行。我的service类如下
public class SimpleService extends Service {
public static final String TAG = "Service";
private Timer timer = new Timer();
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();
Log.i(getClass().getSimpleName(), "Service started.");
startService() ;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
}
private void startService() {
timer.scheduleAtFixedRate(new mainTask(), 0, 200000);
}
private class mainTask extends TimerTask {
public void run() {
for (int i = 0; i <300; i++) {
String count= String.valueOf(i);
Log.d(TAG, count);
}
}
}
protected Intent launchmain_menu() {
Intent i = new Intent(this, SimpleService.class);
return i;
}
}
我已经在我的主活动中启动了我的服务,如下所示startService(new Intent(this, SimpleService.class));
我也写了按钮点击破坏服务如下stopService (launchmain_menu ());
protected Intent launchmain_menu() {
Intent i = new Intent(this, SimpleService.class);
return i;
}
问题是,即使我销毁了服务,start service函数中的循环
ie . .
for (int i = 0; i <300; i++) {
String count= String.valueOf(i);
Log.d(TAG, count);
}
执行。我在模拟器中检查了正在运行的服务,但是在我点击按钮破坏服务后,服务启动了我的me不在那里。如果服务被销毁,循环将如何执行。
有谁能帮我看完这段代码吗?
循环被执行,因为它是在使用您创建的Timer的不同线程上执行的。正如我可以在Timer android文档中读到的,Timer任务一旦开始就不能停止,所以你必须在预定的时间之前取消它,等到任务完成,或者用不同的方式去做。
你需要自己从服务中释放所有的资源,监听器等,因为android不会为你做这些。使用onDestroy()
方法释放所有资源。参考本文档