⑴ 如何终止 android线程池中的任务
Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的 ExecutorService 以允许回收其资源。
通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny 和 invokeAll 是批量执行的最常用形式,它们执行任务 collection,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。
Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。
⑵ Android 中如何在主线程中杀死子线程(非循环,没有for,while语句)
主线程中一个flag标记为true时,用interupt()触发子线程异常,异常里return处理,这是比较安全杀死线程的方法。
⑶ 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 thread join和stop的区别
stop() 方法是立即停止当前线程, 这样停止的后果是导致stop后的语句无法执行, 有可能资源未释放或者在同步块中调用此方法会导致同步数据会不完整. 所以这样的方法并不安全. 强列建议不要使用此函数来中断线程。
interrupt()方法没有stop那么的粗暴,因为可以用catch捕捉到InterruptedException这个异常。一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait以及可中断的通道上的
I/O
操作方法后可进入阻塞状态),方法调用处抛出InterruptedException异常,抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求。
join() 方法作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在主线程调用了join()方法后面的代码,只有等到子线程结束了才能执行
⑸ android 线程销毁
Thread可以用destroy方法销毁,但它不保证资源被释放,所以只能用在无资源的情况下。
1.一般都建议自行控制代码逻辑让run()方法正常执行完
2.常用的方法包括可以被打断(在代码里检测interrupted())、检测状态标识退出循环等
⑹ 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线程
当你在后台使用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开发 thread线程怎么销毁
thread有destroy方法。一般的,都是让这个线程走到头就自动销毁了,要自己设计让这个线程走完退出