android线程的终止
Ⅰ android如何终止一个正在运行的子线程
线程像这样:
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方法里面的sleep(xxxx)后xxxx时间之内调用。也就是子线程会睡一会,醒一会,睡一会,醒一会,要在子线程睡着的时候调用。
Ⅱ android需要考虑结束线程吗
Android终止线程的方法前提
线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象。但有时run方法是永远不会结束的。
三种方法可以结束线程:
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
使用interrupt()方法中断线程。
使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)。
使用退出标志终止线程
使用一个变量来控制循环,例如最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。代码如下:
使用stop方法终止线程
程序中可以直接使用thread.stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。
其他注意事项:
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程,第3种方法相当于电脑断电关机一样,是不安全的方法。
Ⅲ android中的线程该怎么停掉
线程不要直接停止,那样会产生线程不安全的。
你要配合Handler来用。
当下载完之后调用handler.sendEmptyMessage()方法。
或者你换成AsyncTask来实现线程下载。
Ⅳ 如何中断Android线程
当你在后台使用Thread或者AsyncTask来处理一些耗时的操作时,可能想要对这些线程加以控制,其中包括中断线程。
很多情况下,当用户启动程序的时候,一个后台运行的线程会同时启动去加载内容。但是,当用户离开程序时,线程应该被打断,因为现在用户已经不再关注程序了,同时也不再关注线程处理的结果,而线程是要占用系统的资源的,如果不及时中断线程,会导致系统资源的浪费。
除此之外,你可以使用
Thread.interrupt()或者AsyncTask.cancel()
方法,但是这不会马上中断线程,因此,只能在自己的线程中实现中断并退出。
在许多情况下,后台运行的线程都有一个主循环,因此你可以在循环中判断线程是否被中断,若被中断,则退出循环,从而结束进程。例如一个线程下载线程,可以通过
isInterrupted()
方法判断当前线程是否被中断。
thread=newThread(){publicvoidrun(){while(!isInterrupted()&&hasMoreDataToDownload()){
downloadAndWriteSomeMore();}if(isInterrupted()){
();}else{callBack();}}}thread.start();
thread.interrupt();
如果线程被中断,则调用
()
函数,删除没有完成下载的文件。当线程没有被中断,则调用callBack()函数,可以使用handler发送下载完成的信息。
如果你的线程中没有这样一个主循环,例如只是执行一个很耗时的SQL查询操作,可以在查询操作之后调用
来判断是否需要结束线程。
Ⅳ android怎么停止子线程
一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记 (推荐这种)
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;第二中方式,但是对于麻烦的动作,解决方式是这一个全局变量,每个复杂的动作都进行判断一下
Ⅵ Android怎么结束一个线程
在Java语言中,安全结束线程的方法就是“让线程的自身流程执行完”。
出现“僵尸线程”的原因:1.线程在死循环中执行。2.线程阻塞。
很明显,你的ReadHandlerThread线程发生了线程阻塞。
dis.readFully(b),你在这里调用了一个阻塞方法,由于socket的另一端一直没有发送数据,ReadHandlerThread线程一直阻塞在了这里,等待接收完136字节的数据。136字节没有接收完,readFully方法将一直处于阻塞状态。
解决方法,设置socket的等待超时值,而不是无限等待。
Ⅶ android thread 后台线程 怎么设置随着主线程的结束而结束
关于线程的结束有以下几点:
1.不要手动调用stop方法强行终止一个线程,这种方式不安全。
通过帮助文档,我们可以知道,Android的线程类本身就提供了一些公共方法去结束线程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通过说明我们可以看到,这些方法Android本身都是不推荐使用的,通过这种方式结束线程是不安全的。
2.线程里run函数短,执行完后线程会自行销毁,不用手动去终止。
3.手动停止,通过在run里设置标志先停止运行,再调用Thread.interrupt();注意,在run没有停止时调用.interrupt()没有效果。
Ⅷ Android 中如何关闭线程
在android中开启的线程用Thread.stop()来关闭是不会真正关闭的,当我们再次start线程的时候,会产生异常:Thread is already started. 针对这个问题可以在线程的run方法里,加一个判断标志。例如: class TestThread extends Thread{ public void run(){ while(isTrue){ //做你要做的事。}}}在需要关闭的时候,将flag置为false: isTrue=false;并且将运行的线程对象挂起然后置为null(假设开启的线程对象为mTestThread) : mTestThread.interrupt(); mTestThread=null; 再次用到的时候进行如下处理即可: if(mTestThread==null){
Ⅸ Android 中如何停止一个线程
有三种方法可以结束线程:
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
2. 使用interrupt()方法中断线程
3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程;第3种方法相当于电脑断电关机一样,是不安全的方法。