如何在活动中立即停止包含线程的服务

时间:2014-04-13 14:25:08

标签: android multithreading service android-activity

最近,我在后台创建了一个带有服务的应用。我想当我打开我的应用程序时,服务将停止,当我关闭我的应用程序时,服务将启动。我找到了一种方法。我把" startService" in" onDestroy"和#34; stopService" in" onCreate" MainActivity(此活动始终是第一个已启动且最后一个已销毁的活动)。但只有startService工作正常,当我启动我的应用程序时,stopService使我的MainActivity成为一个白色的空白屏幕。

MyService.class

 Thread t;
 public int onStartCommand(Intent intent, int flags, int startId) {
  shouldContinue = true;

    t = new Thread( new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub

            while(shouldContinue){

                int DELAY = 60000;
                SystemClock.sleep(DELAY);
                                    /**
                                      ** I update my Database every 60 seconds
                                      **
                                      */
                          });
        t.start();


          //                 .......

       public void onDestroy() {
    // TODO Auto-generated method stub

    if( t.isAlive()) {
        shouldContinue = false;
        try {
            t.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    super.onDestroy();
}

这是MyMainActivity.class

      protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_splash);
               if( isMyServiceRunning() == true){    

                // TODO Auto-generated method stub
        Intent i= new Intent(this, MyService.class);

        stopService(i);
    }

      protected void onDestroy() {
    // TODO Auto-generated method stub
    if( isMyServiceRunning() == false){
        Intent i= new Intent(this, MyService.class);
        startService(i);

    }
    super.onDestroy();
}



     private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (MyService.class.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

请帮我解决这个问题。非常感谢你!

1 个答案:

答案 0 :(得分:-1)

服务与您的活动在同一个线程上运行。

修改

所以当你join() onDestroy()时,你会等待,最坏的情况是60秒..