============問題描述============
1、system.exit(0)可以退出一個進程的內容。假如在一個activity中存在一個線程這樣他是可以退出的。但是在這個activity如果啟動一個服務,然后在服務中啟動一個線程,那么他無法關閉服務和這個線程 。這是為什么 啟動服務不是也在這個進程中嗎?
服務代碼
public class TestService extends Service{
private boolean isCur=true;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
new Thread(){
public void run() {
while (isCur) {
System.out.println("print out ------------------------------------");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
isCur=false;
System.out.println(" close ---------------------------------------------------------");
super.onDestroy();
}
}
//activity代碼
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void close(View view){
System.exit(0);
}
public void startSer(View view){
Intent intent=new Intent("analisis.resplay.voice.testservice");
startService(intent);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在線等 求大神解釋
============解決方案1============
System.exit(0);關閉的是主線程,服務中另外啟動的線程不在主線程之上,線程執行完之后自動關閉。其實你的問題就是一個結論。
============解決方案2============
在Java中可以用這個方法來結束整個應用,在android中,這個方法也可以關閉Activity,不過有種情況需要注意:開啟的服務如果是和Activity綁定在一起的,當Activity被kill掉后,service也隨之被kill掉;如果service沒有和Activity綁定在一起,當Activity被kill掉后,service是不會馬上被kill掉的,不知道LZ能否理解。
============解決方案3============
也就是如果是bindService啟動的服務才會被KILL掉 如果是通過intent啟動的需要手動stop
============解決方案4============
服務的存在意義就是后台運行,如果會跟主線程一起銷毀那自己的意義也基本沒了!想要關閉的話在ondestory里面手動吧!