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 的回复:
============解决方案4============
服务的存在意义就是后台运行,如果会跟主线程一起销毁那自己的意义也基本没了!想要关闭的话在ondestory里面手动吧!
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里面手动吧!
相关文章推荐
- 关于Android开发中使用System.exit(0)的问题(如写返回键响应时用到双击退出函数的时候)
- android开发两种退出程序方式(killProcess,System.exit) 分类: Android Activity 2014-06-13 17:28 84人阅读 评论(0) 收藏
- android开发两种退出程序方式(killProcess,System.exit)
- 王立平--android中让程序终止退出的解决办法 System.exit(0)
- 【Android】System.exit(0) 退出程序
- android开发两种退出程序方式(killProcess,System.exit)
- android开发两种退出程序方式(killProcess,System.exit)
- android开发两种退出程序方式(killProcess,System.exit)
- android开发两种退出程序方式(killProcess,System.exit)
- Android退出程序的两种方式killProcess()和System.exit()
- android开发两种退出程序方式(killProcess,System.exit)
- android中finish和system.exit方法退出的区别
- ArcGIS for Android 1.1 MapView 的Activity退出时整个程序崩溃问题
- 关于android 多个Activity应用程序按返回键退出程序问题
- Android 下Qt 多层窗口关闭时程序退出的问题 解决
- android 退出程序解决内存释放的问题
- android 退出选项 System.exit(0)和finish()的区别
- 关于程序退出无法关闭所有界面问题 通过广播使Android程序完全退出
- android使用finish()和System.exit()退出应用程序的理解
- android 退出程序解决内存释放的问题