您的位置:首页 > 移动开发 > Android开发

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

2014-10-23 16:33 232 查看
============问题描述============

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里面手动吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: