在Service中编写的函数即使Service被销毁也可以运行



我在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()方法释放所有资源。参考本文档

相关内容

最新更新