Code Bye

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;
}

}

在线等 求大神解释


10分
System.exit(0);关闭的是主线程,服务中另外启动的线程不在主线程之上,线程执行完之后自动关闭。其实你的问题就是一个结论。
引用 1 楼 u012535657 的回复:

System.exit(0);关闭的是主线程,服务中另外启动的线程不在主线程之上,线程执行完之后自动关闭。其实你的问题就是一个结论。

我的问题其实是 system.extit(0)能关闭那些东西,他为什么无法关闭 服务,服务也是运行在主线程中。而且是同一个进程中,而他没关闭。


10分
在Java中可以用这个方法来结束整个应用,在android中,这个方法也可以关闭Activity,不过有种情况需要注意:开启的服务如果是和Activity绑定在一起的,当Activity被kill掉后,service也随之被kill掉;如果service没有和Activity绑定在一起,当Activity被kill掉后,service是不会马上被kill掉的,不知道LZ能否理解。

10分
引用 3 楼 u012535657 的回复:

在Java中可以用这个方法来结束整个应用,在android中,这个方法也可以关闭Activity,不过有种情况需要注意:开启的服务如果是和Activity绑定在一起的,当Activity被kill掉后,service也随之被kill掉;如果service没有和Activity绑定在一起,当Activity被kill掉后,service是不会马上被kill掉的,不知道LZ能否理解。

  也就是如果是bindService启动的服务才会被KILL掉 如果是通过intent启动的需要手动stop


10分
服务的存在意义就是后台运行,如果会跟主线程一起销毁那自己的意义也基本没了!想要关闭的话在ondestory里面手动吧!
引用 3 楼 u012535657 的回复:

在Java中可以用这个方法来结束整个应用,在android中,这个方法也可以关闭Activity,不过有种情况需要注意:开启的服务如果是和Activity绑定在一起的,当Activity被kill掉后,service也随之被kill掉;如果service没有和Activity绑定在一起,当Activity被kill掉后,service是不会马上被kill掉的,不知道LZ能否理解。

这个结论我都知道,也都做过,不过现在了解清楚了。
system.exit(0)关闭的是虚拟机中内存,也就是kill掉当前进程。而之所以start的服务不会被杀死是因为启动一个服务是默认是启动一个进程来运行。所以有了 这么个结论 是不是把所有的activity或者服务都将他们设置成在同一个进程中是否能用  system.exit(0)完全退出系统? 尝试中

我也很不明白,service本来就是和activity在同一个线程,activity挂了,应该service也挂了才对,但是没有。。。
activity若跟service没有bind一起,那么在activity中调用system.exit(0)之后,整个程序确实马上退出了,但是你仔细观看一下系统的log,会有个schedule restart 你的yingyongming 5000ms later,也就是说系统会重启你的service,你可以做个试验测试一下
你手动启的服务,在退出activity的时候你也没手动关闭服务啊!并且在服务的onDestroy里加上System.exit(0);

或者你activity绑定服务,这样的话就不用手动启动和手动关闭服务了!但服务的onDestroy里都应System.exit(0);     你试下!

楼主的问题解决么,能不能贴出你解决的办法。我也碰到和你一样的情况,并且使用  stopself和stopservice会出现ANR

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明android system.exit(0)退出程序的问题