android system.exit(0)退出程序的問題


============問題描述============


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============


引用 3 樓 u012535657 的回復:
在Java中可以用這個方法來結束整個應用,在android中,這個方法也可以關閉Activity,不過有種情況需要注意:開啟的服務如果是和Activity綁定在一起的,當Activity被kill掉后,service也隨之被kill掉;如果service沒有和Activity綁定在一起,當Activity被kill掉后,service是不會馬上被kill掉的,不知道LZ能否理解。
  也就是如果是bindService啟動的服務才會被KILL掉 如果是通過intent啟動的需要手動stop

============解決方案4============


服務的存在意義就是后台運行,如果會跟主線程一起銷毀那自己的意義也基本沒了!想要關閉的話在ondestory里面手動吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM