在服务中编写的函数运行甚至服务已被销毁

时间:2011-10-11 06:00:23

标签: android

我已经编写了一个服务函数,它在服务启动时执行。我的服务类如下

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;
}

问题是,即使我在启动服务功能

中销毁服务循环

即..

for (int i = 0; i <300; i++) { 
                 String count= String.valueOf(i);
                 Log.d(TAG, count);
}

得到执行。我已经检查了衔接器中正在运行的服务,但是在我点击按钮销毁服务之后,我的服务就开始了。如果服务被破坏,循环是否会被执行。

在查看此代码后,是否有人会帮助我。

2 个答案:

答案 0 :(得分:0)

你需要自己从服务中释放所有资源,监听器等,因为android不会为你做。使用onDestroy()方法释放所有资源。请参阅此doc

答案 1 :(得分:0)

循环执行是因为它使用您创建的Timer在不同的线程上执行。正如我在Timer android documentation中读到的那样,Timer任务一旦启动就无法停止,所以你必须在它的预定时间之前取消它,等到任务完成,或以不同的方式完成。