0 0

一个关于Android程序退出后,线程停止的问题10

在Android的程序中,UI线程是主线程
理论上来讲,Activity调用了finish方法后,主线程就终止了
那么其上的子线程也应该是停止

但是通过测试,发现并不是这样
finish退出程序后,子线程还在后台跑
必须用DDMS停止该线程才行

那么如何在程序退出时,停止所有开启的子线程呢?
我想到了两个方案:

一,在退出时,改变线程内循环的标识符
while(isRun){...}
将isRun置为false,则打破了循环,线程终止

二,不采用while(isRun){...}这样的循环方式
而利用Android提供的Handler机制来完成
//将一个线程立即加入线程队列,并执行它的[color=red]run[/color]方法
handler.post(test);

Runnable test = new Runnable(){
  public void run(){
    //以上代码略
    //延迟1000毫秒,执行这个线程的[color=red]run[/color]方法
    handler.postDelayed(test,1000);
  }
}

//退出时
//即从线程队列中移除该线程,不再被执行
handler.removeCallbacks(test);

如红字标注,确实是调用的run方法,所以其实并未真正的启动一个子线程

以上是我想到的两个方案,不知对不对
请大家来探讨一下
问题补充
原来我的理解不对
楼上兄台能否指点一二
在下感激不尽
问题补充
原来如此
谢谢指教
2011年6月17日 09:17

8个答案 按时间排序 按投票排序

0 0

system.exit(0),这个应该可以

2011年6月24日 09:15
0 0

可以用HandlerThread,将它的Looper给handler就可以,具体用法如下:
HandlerThread handlerThread=new HandlerThread("threadTag");
handlerThread.start();
Handler handler=new Handler(handlerThread.getLooper());
handler.post(test);
这样test不会阻塞ui线程

在activity的onDestroy()方法中handler.removeCallbacks(test)

2011年6月21日 16:03
0 0

这个问题也一直困扰着我,也一直没有找到解决的办法。结果,只能用线程池来解决。不知道那位高手有好的方法,不吝赐教。

2011年6月17日 09:17
0 0

调用android.os.Process.killProcess(android.os.Process.myPid())这个会杀死进程!

2011年6月17日 09:17
0 0

activity finish之后,子线程还是会运行,除非你在destory是显示将标志位置为false,还有一种情况,当系统内存吃紧,系统回收掉你的线程。

2011年6月17日 09:17
0 0

系统已经很好的封装了一些类,是你没有太注意吧。

HandlerThread

Looper.myLooper().quit()

Thread.join()

自己去查查,就能解决线程的安全退出。
当然,某个耗时的任务,还是得用标志之类的办法让他中途停下来。

2011年6月17日 09:17
0 0

finish 系统并不回收该进程...附带线程没被回收.
等系统需要资源再进行关闭.
也会跟着被回收.

2011年6月17日 09:17
0 0

引用
Activity调用了finish方法后,主线程就终止了

这个说法是不对的。

引用
那么其上的子线程也应该是停止

这个说法也不对。即使主线程终止,非deamon的子线程也不会终止。

2011年6月17日 09:17

相关推荐

    Android线程结束——合理的结束你想结束的线程

    当一个线程正在执行系统资源密集型操作时,突然停止可能会留下资源泄露和不一致的状态。 2. **使用interrupt()方法**:如果线程在循环或阻塞操作中,可以调用interrupt()方法来标记线程应该停止执行。在循环或阻塞...

    android 线程暂停/恢复/退出demo

    退出线程则相对简单,但同样需要谨慎操作。线程通常在`run()`方法结束时自动退出。然而,如果你想在特定条件下提前结束线程,可以抛出一个异常或者调用`System.exit()`(尽管不推荐)。更好的做法是设置一个标志,让...

    安卓程序登录后一段时间不进行操作,自动退出程序

    当检测到用户离开应用的时间超过这个阈值时,发送一个消息或者调用一个函数来关闭Activity,从而退出程序。 3. **处理退出逻辑** 在收到超时信号后,不要直接调用`finish()`来结束Activity,因为这可能会导致系统...

    android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行.zip

    - 【Android】【转】Android程序退出彻底关闭进程的方法 - 风倾清凌 - 博客园(url) 通过上述方法的组合使用,可以有效地结束Android App的进程,但需谨慎操作,避免对应用的正常功能和用户体验造成负面影响。

    Android开发之多线程的操作方式

    在Android开发中,多线程是一项至关重要的技术,它使得应用程序可以同时执行多个任务,提升用户体验,特别是对于处理耗时操作如网络请求、大数据计算或长时间的UI更新时。本篇将详细介绍四种Android中实现多线程的...

    Android 多线程断点续传下载

    在Android开发中,多线程断点续传下载是一项重要的技术,它允许用户在中断下载后,从上次停止的地方继续下载,提高了用户体验。这个技术主要涉及到网络编程、多线程处理以及文件操作等多个方面。接下来,我们将深入...

    Android线程使用实例

    同时,为了提供良好的用户体验,确保线程在正确的时间停止,并且在退出应用程序时释放资源。 通过上述的Thread或AsyncTask实现,你可以创建一个基本的秒表功能。然而,Android提供了更多的线程管理工具,如...

    Android通用多个线程通信管理框架.pdf

    这是因为Android的UI系统并不是线程安全的,多个线程如果同时操作UI,会导致数据不同步甚至程序崩溃的问题。因此,主线程以外的线程如果需要更新UI,必须通过Handler发送消息到主线程的Handler中处理。 5. 线程中断...

    Android应用源码完全退出程序的方法-IT计算机-毕业设计.zip

    在Android应用开发中,完全退出程序是一个常见的需求,特别是在用户希望彻底关闭应用,释放系统资源时。本项目提供了一个Android应用源码示例,适用于毕业设计或深入理解Android应用程序生命周期的学习。下面将详细...

    22-线程间通信和Android多线程1

    - `Thread.interrupt()`:通过设置中断标志来通知线程停止执行,是一种相对温和的方式。调用`isInterrupted()`或`interrupted()`检查中断状态,通常配合循环使用,以便在安全点退出。 - `InterruptedException`:...

    Android安卓app 让程序假退出,仍在后台运行.zip

    2. IntentService:这是一个单线程的Service,适合执行一次性任务,完成后自动停止。 3.前台Service:通过showNotification()将Service置于前台,这样系统更不容易因内存不足而杀死Service。 4. BroadcastReceiver:...

    Android中断并重启一个Thread线程的简单方法

    一旦中断标志被设置,循环就会结束,`run()`方法也就自然退出,线程停止执行。 接下来,我们来看看如何启动和停止线程。启动线程通常是通过调用`Thread.start()`方法。在给出的例子中,`startThread()`方法创建了一...

    Android 多线程断点续传 下载

    在Android开发中,实现多线程断点续传下载是一项重要的技术,这使得用户可以在网络不稳定或者设备关闭后,能够从上次停止的地方继续下载大文件,提高了用户体验。本项目【AndroidDownLoad(多线程断点续传)】提供了一...

    android开发串口,修改串口为非阻塞模式

    最近用android_serialport_api开发了一个串口通讯程序,在使用过程中发现android_serialport_api基本构架都有 ,不过还有不少的缺陷,缺陷之一是:读取串口信息是阻塞模式,在向串口发出命令后,如果没返回的话,...

    Android-用漂亮的方式描述Android应用程序的持续时间

    在Android开发中,应用程序的持续时间通常指的是应用从启动到退出这一过程中的生命周期。这个生命周期包括了各种状态的切换,如活动(Activity)的创建、暂停、恢复和销毁,服务(Service)的启动与停止,以及后台...

    简单了解C语言中主线程退出对子线程的影响

    当一个进程中的所有线程都结束时,进程才会真正退出。如果主线程提前退出,但进程本身并未终止,子线程将继续运行,直到它们完成自己的任务或被显式地终止。 **主线程先退出的情况** 1. **主线程被子线程终止:** ...

    android串口SerialPort的一个Demo程序代码

    总的来说,`SerialPortDemo`是一个完整的Android串口通信示例,它涵盖了从初始化、配置、通信到关闭串口的整个过程。通过分析和学习这个示例,开发者可以快速掌握在Android应用中实现串口通信的方法。

    android通过Service进行文件下载,后台下载

    本教程将深入探讨如何利用Service组件在Android设备上实现文件的后台下载,确保即使用户退出应用程序,文件下载也能继续进行。 ### 1. Android Service基础知识 Service是Android四大组件之一,它在后台运行,没有...

    Android app 闪退弹框 CrashUI当 Android app内发生exception

    在Android应用开发中,"Android app 闪退弹框 CrashUI"是一个常见的问题,它涉及到应用程序异常处理和用户体验。当Android应用在运行时遇到未被捕获的异常(Exception),系统会默认终止应用并显示一个简单的错误...

    完全退出程序的方法.zip

    本文将详细探讨如何“完全退出”一个程序,以确保它不占用系统资源并彻底关闭。我们将通过一个名为"MyActivity.java"的Java代码示例来解释这个过程。 1. **程序的生命周期**: 在Android开发中,`Activity`是应用...

Global site tag (gtag.js) - Google Analytics