2012-11-29 71 views
0

我在onDestroy()方法中編寫此代碼。關閉背景時無法關閉服務

@Override 
public void onDestroy() 
{ 
MessageService.this.stopSelf(); 
messageThread.isRunning = false; 
System.exit(0); 
super.onDestroy(); 
} 

並關閉其他Activity中的服務。

stopService(new Intent(MainOptionActivity.this,MessageService.class)); 

我試了很多代碼,關閉背景後無法關閉服務。任何人都可以給我一些建議嗎?謝謝。

回答

2

下面是服務類

public class MyService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 

    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(getApplicationContext(), "MSG onCreate SERVICE", Toast.LENGTH_LONG).show(); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(getApplicationContext(), "MSG onStartCommand SERVICE", Toast.LENGTH_LONG).show(); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(getApplicationContext(), "MSG STOP SERVICE", Toast.LENGTH_LONG).show(); 
    super.onDestroy(); 
} 

} 

一個簡單的代碼,這裏是測試該服務

startService(new Intent(this, MyService.class)); 

    new Timer().schedule(new TimerTask() { 

     @Override 
     public void run() { 
      startService(new Intent(getApplicationContext(), MyService.class)); 
     } 
    }, 5000); 

    new Timer().schedule(new TimerTask() { 

     @Override 
     public void run() { 
      stopService(new Intent(getApplicationContext(), MyService.class)); 
     } 
    }, 10000); 

這工作得很好的代碼。還要在清單中添加此代碼

<service android:name=".MyService" /> 
1

請勿在Android上使用System.exit(0),而應使用finish(例如在Activity中)。

但是沒有必要停止自己onDestroy方法,它實際上會被停止和銷燬(這就是onDestroy方法的用途)。

您停止與System.exit(0);的方法的執行,因此係統永遠不會到達super.onDestroy();點和服務不被破壞。

儘量只

@Override 
public void onDestroy() { 
    messageThread.isRunning = false; 
    super.onDestroy(); 
}