热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

android终止无限循环线程和程序退出时销毁线程

android,启动了一个子线程,这个子线程是一个死循环,不成的打印“Hello”。现在要实现点击一个Button,让这个子线程终止,用什么方法啊?stop()不起作用,destroy()有异常,Ha

android,启动了一个子线程,这个子线程是一个死循环,不成的打印“Hello”

现在要实现点击一个Button,让这个子线程终止,用什么方法啊?

stop()不起作用,destroy()有异常,Handler貌似也解决不了,因为是一个线程。。。

 

答案如下:

线程像这样:Thread{    boolean flag = fase;    run(){        while(!flag){        }    }}Thread t = new Thread();t.start();-----------------------------------------------------要终止循环,只需要这样t.flag=true;================================================还有一种方式线程像这样:Thread{    run(){        while(true){               Thread.sleep(xxxx);        }    }}Thread t = new Thread();t.start();--------------------------------------------要终止循环,只需要这样t.interrupte();但是这里要注意调用的时机,要在子线程执行了run方法里面的sleepxxxx)后xxxx时间之内调用。也就是子线程会睡一会,醒一会,睡一会,醒一会,要在子线程睡着的时候调用。


 

 

 

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

http://www.iteye.com/problems/67052

经过测试:以下方法可以终止线程。

方法一:System.exit(0);

方法二:android.os.Process.killProcess(android.os.Process.myPid())//关闭时稍微有些延迟





0

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

Android的程序中,UI线程是主线程 

理论上来讲,Activity调用了finish方法后,主线程就终止了 

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


但是通过测试,发现并不是这样 

finish退出程序后,子线程还在后台跑 

必须用DDMS停止该线程才行 


那么如何在程序退出时,停止所有开启的子线程呢? 

我想到了两个方案: 


一,在退出时,改变线程内循环的标识符 

while(isRun){...} 

isRun置为false,则打破了循环,线程终止 


二,不采用while(isRun){...}这样的循环方式 

而利用Android提供的Handler机制来完成 

Java代码  

  1. //将一个线程立即加入线程队列,并执行它的[color=red]run[/color]方法  
  2. handler.post(test);  
  3.   
  4. Runnable test = new Runnable(){  
  5.   public void run(){  
  6.     //以上代码略  
  7.     //延迟1000毫秒,执行这个线程的[color=red]run[/color]方法  
  8.     handler.postDelayed(test,1000);  
  9.   }  
  10. }  
  11.   
  12. //退出时  
  13. //即从线程队列中移除该线程,不再被执行  
  14. handler.removeCallbacks(test);  


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


以上是我想到的两个方案,不知对不对 

请大家来探讨一下

问题补充

原来我的理解不对 

楼上兄台能否指点一二 

在下感激不尽

问题补充

原来如此 

谢谢指教



由于在Androidapk包对应的是一个组件,你退出MainActivity,并不代码这个组件运行的进程被杀。这里建议,加强对线程的管理,不要放任线程在后台跑,而不知道他的状态。参考http://developer.android.com/guide/components/processes-and-threads.html,里

 AsyncTask



推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文详细介绍了Ionic框架的使用方法及其与Angular的集成。Ionic框架是一个强大的前端开发工具,适用于构建跨平台的移动应用程序。文章将探讨如何引入必要的CSS和JavaScript文件,并解释bundle.js中包含的核心功能,如路由等。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文详细介绍如何在IntelliJ IDEA 14中打包Android应用APK文件,并提供查询SHA1值的具体步骤。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
author-avatar
yuhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有