android线程终止
1. Android如何停止线程的方式
一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记
(推荐这种)
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;第二中方式,但是对于麻烦的动作,解决方式是这一个全局变量,每个复杂的动作都进行判断一下
2. android如何终止递归的子线程
在您子线程的run函数中:
java">publicvoidrun(){
while(!isInterrupted()){//判断线程是否被要求中断过,中断,就线程循环结束.
//想让线程做什么..
}
}
在主线程调用finish()前:
if(mMyThread!=null&&mMyThread.isAlive()){//线程活着?中断它..
mMyThread..interrupt();
}
注:mMyThread是线程对象的引用...
3. android需要考虑结束线程吗
Android终止线程的方法前提
线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象。但有时run方法是永远不会结束的。
三种方法可以结束线程:
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
使用interrupt()方法中断线程。
使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)。
使用退出标志终止线程
使用一个变量来控制循环,例如最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。代码如下:
使用stop方法终止线程
程序中可以直接使用thread.stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。
其他注意事项:
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程,第3种方法相当于电脑断电关机一样,是不安全的方法。
4. 如何终止 android线程池中的任务
终止android线程池中的任务的方法
1.实现Callable接口
2.调用pool.submit()方法,返回futrue对象
3.用future对象来获取线程的状态。
voidtest(){
ExecutorServicepool=Executors.newFixedThreadPool(2);
Callable<String>s=newCallable<String>(){
@Override
publicStringcall()throwsException{
System.out.println("test");
return"true";
}
};
Future<String>f=pool.submit(s);
System.out.println(f.isCancelled());
System.out.println(f.isDone());
f.cancel(true);
}
5. android 强行关闭线程
这个好办,这里有两个线程吧,线程A
线程mSender。
设:让线程A,监视线程mSender
第一步:
在A中定义一个变量:ExecutorService
transThread
=
Executors.newSingleThreadExecutor();
解释:transThread
官方名称是“单一线程池变量”,他是做什么的呢,它就像我们给A的一块赛车场,用来玩遥控赛车。
第二步:
在A中再定义一个变量:
Future
transPending;
解释:transPending就像我给A一个用来控制遥控赛车的遥控器一样
第三步:
在A中定义个线程mSender对象:
private
final
Runnable
mSender
=
new
Runnable()
{
public
void
run()
{
}};
解释:这是你写的对象,他就相当于我给A的一个遥控赛车。
第四步:
在A中添加如下语句:transPending
=
transThread.submit(mSender);
解释:这一步就相当于把赛车(mSender)放入场地(第一步中我们定义的transThread),并且用遥控器“transPending”来控制他。
(注:这里你是否会有疑惑,我没有写"mSender.start()"之类的语句怎么让我的赛车跑起来啊(运行run()方法),放心,有了“transPending
=
transThread.submit(mSender);”这一步,赛车是自动跑起来的,也就是mSender会自动调用run的。)
第五步:
现在你可以用遥控器“transPending”干很多事情了
transPending.cancel(true);无论线程现在是否运行中,立刻终止。
transPending.cancel(false);当前线程若没有运行(比如挂起状态)就终止它。
transPending所做的不止这些。
6. android中的线程该怎么停掉
线程不要直接停止,那样会产生线程不安全的。
你要配合Handler来用。
当下载完之后调用handler.sendEmptyMessage()方法。
或者你换成AsyncTask来实现线程下载。
7. Android如何停止线程的方式
一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记 (推荐这种)
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;第二中方式,但是对于麻烦的动作,解决方式是这一个全局变量,每个复杂的动作都进行判断一下
8. android怎么停止子线程
一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记 (推荐这种)
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;第二中方式,但是对于麻烦的动作,解决方式是这一个全局变量,每个复杂的动作都进行判断一下
9. Android怎么结束一个线程
在Java语言中,安全结束线程的方法就是“让线程的自身流程执行完”。
出现“僵尸线程”的原因:1.线程在死循环中执行。2.线程阻塞。
很明显,你的ReadHandlerThread线程发生了线程阻塞。
dis.readFully(b),你在这里调用了一个阻塞方法,由于socket的另一端一直没有发送数据,ReadHandlerThread线程一直阻塞在了这里,等待接收完136字节的数据。136字节没有接收完,readFully方法将一直处于阻塞状态。
解决方法,设置socket的等待超时值,而不是无限等待。
10. 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时间之内调用。也就是子线程会睡一会,醒一会,睡一会,醒一会,要在子线程睡着的时候调用。