当前位置:首页 » 安卓系统 » android线程被终止

android线程被终止

发布时间: 2022-08-12 09:44:27

Ⅰ android 线程执行完会主动销毁吗

不会自动销毁,除非主动关闭它们。
一、销毁的方法
1、通过线程
Hanlder是线程与Activity通信的桥梁,利用handler接收到任务线程,放到任务队列里面派对执行。
//调用该任务线程的run() 方法执行任务线程。
Handler updateBarHandler =new handler();
handler.post(Runnable Thread);
//移除handler里的任务线程,调用线程的stop()方法,销毁线程。
handler.removecallbacks(Runnable Thread);
2、通过Timer
通过以下四种方法终止一个timer线程:
a)调用timer的cancle方法。可以从程序的任何地方调用此方法,甚至在一个timer task的run方法里;
b)让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行;
c)当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止;
d)调用System.exit方法,使整个程序(所有线程)终止。

Ⅱ Android 中如何停止一个线程

有三种方法可以结束线程:
1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
2. 使用interrupt()方法中断线程
3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)
前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程;第3种方法相当于电脑断电关机一样,是不安全的方法。

Ⅲ 线程正被终止

1.终止线程

线程终止后,其生命周期结束了,即进入死亡态,终止后的线程不能再被调度执行,以下几种情况,线程进入终止状态:
1) 线程执行完其run()方法后,会自然终止。
2) 通过调用线程的实例方法stop()来终止线程。

2. 测试线程状态

可以通过Thread 中的isAlive() 方法来获取线程是否处于活动状态;线程由start() 方法启动后,直到其被终止之间的任何时刻,都处于'Alive'状态。

3. 线程的暂停和恢复

有几种方法可以暂停一个线程的执行,在适当的时候再恢复其执行。
1) sleep() 方法
当前线程睡眠(停止执行)若干毫秒,线程由运行中状态进入不可运行状态,停止执行时间到后线程进入可运行状态。

2) suspend()和resume()方法
线程的暂停和恢复,通过调用线程的suspend()方法使线程暂时由可运行态切换到不可运行态,若此线程想再回到可运行态,必须由其他线程调用resume()方法来实现。
注:从JDK1.2开始就不再使用suspend()和resume()。

3) join()
当前线程等待调用该方法的线程结束后, 再恢复执行.
TimerThread tt=new TimerThread(100);
tt.start();

public void timeout(){
tt.join();// 当前线程等待线程tt 执行完后再继续往下执行
… }

Ⅳ android需要考虑结束线程吗

  • Android终止线程的方法前提

    线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象。但有时run方法是永远不会结束的。

  • 三种方法可以结束线程:

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。

  2. 使用interrupt()方法中断线程。

  3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)。

  • 使用退出标志终止线程

    使用一个变量来控制循环,例如最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。代码如下:

  • 使用stop方法终止线程

    程序中可以直接使用thread.stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。

其他注意事项:

前两种方法都可以实现线程的正常退出,也就是要谈的优雅结束线程,第3种方法相当于电脑断电关机一样,是不安全的方法。

Ⅳ 如何中断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中如果activity被destroy。那么在这个activity中start的thread会处于什么样的状态

该线程如果没有跑完run方法不会被关闭,当程序终止的时候线程会被结束掉。该thread发消息给handler后handler将继续处理,是否会报错在于是否调用了该activity,及该activity的内存是否被回收。activity调用onDestroy方法后内存并没有被销毁,而是处在了activity栈的底层,当内存不够的时候,该activity的内存将被回收掉。所以在该activity的内存未回收,并且调用activity时不会报错,在该activity的内存已经被回收,并调用该activity时会报错。可以在该activity中加入标记变量来标记是否该activity被destroy,当该变量值为真时不处理该消息。

Ⅶ 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所做的不止这些。

Ⅷ Android如何停止线程的方式

一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记
(推荐这种)
如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
成一次run方法;第二中方式,但是对于麻烦的动作,解决方式是这一个全局变量,每个复杂的动作都进行判断一下

Ⅸ 如何实现Android 中断线程的处理

可以用interrupt()方法中断线程,而线程是否已经中断则用Thread.currentThread().isInterrupted()方法返回true/false判断:
1、线程start()后马上调用interrupt(),在进入run()时中断标志已经被set on;
2、在处理sleep()可能抛出的InterruptedException时,再次中断线程即可成功中断;
3、注意interrupt()方法是set on 中断标志的,interrupted()方法是判断后并清除中断标志的。

public class ThreadDemo extends Thread{
public static void main(String[] args){
try{
ThreadDemo thread = new ThreadDemo();
thread.start();
thread.sleep(100);

thread.interrupt(); //中断线程
thread.sleep(100);

thread.printStr();
thread.interrupt(); //第三次中断线程

thread.printStr();
thread.join();
}catch(InterruptedException e){
e.printStackTrace();
}
}

private void printStr(){
System.out.println("thread obj");
}

@Override
public void run() {
while(!Thread.currentThread().isInterrupted()) {
System.out.println("thread running");

try {
Thread.sleep(100);
}catch(InterruptedException e)
{
System.out.println("InterruptedException");
Thread.currentThread().interrupt(); //再次中断线程
}
}

System.out.println("thread interrupted");
}
}
运行结果:
thread running
InterruptedException
thread interrupted
thread obj
thread obj

热点内容
ftp游戏下载网站 发布:2025-01-18 02:09:04 浏览:627
python调用另一个文件中的函数 发布:2025-01-18 02:03:54 浏览:596
mysql存储html 发布:2025-01-18 01:57:24 浏览:128
双ip服务器对网站优化有影响吗 发布:2025-01-18 01:56:41 浏览:245
汽车配置怎么区分自动挡 发布:2025-01-18 01:53:06 浏览:228
加密手机通讯录 发布:2025-01-18 01:43:58 浏览:347
云帆php 发布:2025-01-18 01:38:51 浏览:727
linux获取dhcp 发布:2025-01-18 01:34:42 浏览:641
c语言搞怪 发布:2025-01-18 01:29:08 浏览:678
c语言转换说明 发布:2025-01-18 01:28:53 浏览:141