android system.exit(0)退出程序的问题

juen32 2014-02-28 11:34:42
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;
}

}


在线等 求大神解释
...全文
5982 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小林望北 2015-05-19
  • 打赏
  • 举报
回复
引用 11 楼 u010707039 的回复:
[quote=引用 7 楼 qiantujava 的回复:] 我也很不明白,service本来就是和activity在同一个线程,activity挂了,应该service也挂了才对,但是没有。。。
其实服务确实是挂掉了,只是后来系统又重启了服务,所以你以为没挂掉而已。详细请去看onStartCommand()方法返回值,这个方法的返回值将会决定服务是否会被系统重启。[/quote] 有两种启动Service的方法,直接startService的话,Activity退出的时候service并不会退出;如果是bindService的话那Activity退出,Service也会退出。
KingfarOu 2015-05-17
  • 打赏
  • 举报
回复
引用 7 楼 qiantujava 的回复:
我也很不明白,service本来就是和activity在同一个线程,activity挂了,应该service也挂了才对,但是没有。。。
其实服务确实是挂掉了,只是后来系统又重启了服务,所以你以为没挂掉而已。详细请去看onStartCommand()方法返回值,这个方法的返回值将会决定服务是否会被系统重启。
hw1047601317 2014-10-21
  • 打赏
  • 举报
回复
楼主的问题解决么,能不能贴出你解决的办法。我也碰到和你一样的情况,并且使用 stopself和stopservice会出现ANR
11点40 2014-07-10
  • 打赏
  • 举报
回复
你手动启的服务,在退出activity的时候你也没手动关闭服务啊!并且在服务的onDestroy里加上System.exit(0); 或者你activity绑定服务,这样的话就不用手动启动和手动关闭服务了!但服务的onDestroy里都应System.exit(0); 你试下!
阿布1991 2014-04-14
  • 打赏
  • 举报
回复
activity若跟service没有bind一起,那么在activity中调用system.exit(0)之后,整个程序确实马上退出了,但是你仔细观看一下系统的log,会有个schedule restart 你的yingyongming 5000ms later,也就是说系统会重启你的service,你可以做个试验测试一下
小林望北 2014-03-25
  • 打赏
  • 举报
回复
我也很不明白,service本来就是和activity在同一个线程,activity挂了,应该service也挂了才对,但是没有。。。
juen32 2014-03-04
  • 打赏
  • 举报
回复
引用 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)完全退出系统? 尝试中
ns_235 2014-03-03
  • 打赏
  • 举报
回复
引用 3 楼 u012535657 的回复:
在Java中可以用这个方法来结束整个应用,在android中,这个方法也可以关闭Activity,不过有种情况需要注意:开启的服务如果是和Activity绑定在一起的,当Activity被kill掉后,service也随之被kill掉;如果service没有和Activity绑定在一起,当Activity被kill掉后,service是不会马上被kill掉的,不知道LZ能否理解。
也就是如果是bindService启动的服务才会被KILL掉 如果是通过intent启动的需要手动stop
niekangshibendan 2014-03-03
  • 打赏
  • 举报
回复
服务的存在意义就是后台运行,如果会跟主线程一起销毁那自己的意义也基本没了!想要关闭的话在ondestory里面手动吧!
marlenna 2014-02-28
  • 打赏
  • 举报
回复
System.exit(0);关闭的是主线程,服务中另外启动的线程不在主线程之上,线程执行完之后自动关闭。其实你的问题就是一个结论。
marlenna 2014-02-28
  • 打赏
  • 举报
回复
在Java中可以用这个方法来结束整个应用,在android中,这个方法也可以关闭Activity,不过有种情况需要注意:开启的服务如果是和Activity绑定在一起的,当Activity被kill掉后,service也随之被kill掉;如果service没有和Activity绑定在一起,当Activity被kill掉后,service是不会马上被kill掉的,不知道LZ能否理解。
juen32 2014-02-28
  • 打赏
  • 举报
回复
引用 1 楼 u012535657 的回复:
System.exit(0);关闭的是主线程,服务中另外启动的线程不在主线程之上,线程执行完之后自动关闭。其实你的问题就是一个结论。
我的问题其实是 system.extit(0)能关闭那些东西,他为什么无法关闭 服务,服务也是运行在主线程中。而且是同一个进程中,而他没关闭。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧