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

android线程停止

发布时间: 2023-07-27 02:55:17

❶ 如何实现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

❷ Android如何停止线程的方式

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

❸ android需要考虑结束线程吗

  • Android终止线程的方法前提

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

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

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

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

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

  • 使用退出标志终止线程

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

  • 使用stop方法终止线程

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

其他注意事项:

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

❹ android viewmodel取消线程

在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。

1 package com.lsw;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.Message;
7 import android.util.Log;
8 public class ThreadDemoActivity extends Activity {
9 private static final String TAG = "ThreadDemo";
10 private int count = 0;
11 private Handler mHandler = new MyHandler();
12 boolean stopThread=false;
13
14 private Runnable mRunnable = new Runnable() {
15
16 public void run() {
17
18 while (!stopThread)
19 {
20 count++;
21 try
22 {
23 Thread.sleep(2000);
24 }
25 catch (InterruptedException e)
26 {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30
31 //虽然Message的构造函数是public的,但是最好是使用Message.obtain( )或Handler.obtainMessage( )函数来获取Message对象,因为Message的实现中包含了回收再利用的机制,可以提供效率。
32 Message message=mHandler.obtainMessage();
33 message.what=0;
34 message.obj=count;
35 mHandler.sendMessage(message);
36 }
37 }
38 };
39
40 @Override
41 public void onCreate(Bundle savedInstanceState) {
42 super.onCreate(savedInstanceState);
43 setContentView(R.layout.main);
44 //开启子线程
45 new Thread(mRunnable).start();
46 }
47
48 protected void onDestroy() {
49 System.out.println("-----------onDestroy------");
50 stopThread=true;
51 super.onDestroy();
52 };
53
54 class MyHandler extends Handler{
55
56 @Override
57 public void handleMessage(Message msg)
58 {
59 // TODO Auto-generated method stub
60 Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);
61 setTitle("" +msg.obj);
62 }
63 }
64
65 }

❺ android怎么停止子线程

一种是调用它里面的stop()方法,另一种就是你自己设置一个停止线程的标记 (推荐这种)

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

❻ 如何终止 android线程池中的任务

  • 终止android线程池中的任务的方法

    1.实现Callable接口

    2.调用pool.submit()方法,返回futrue对象

    3.用future对象来获取线程的状态。



  • java">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);


    }


❼ 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查询操作,可以在查询操作之后调用 来判断是否需要结束线程。

热点内容
维普中文期刊数据库 发布:2025-02-05 00:45:33 浏览:754
安卓哪里填写apple代码 发布:2025-02-05 00:28:54 浏览:290
oppo手机锁屏密码忘记后如何更换 发布:2025-02-05 00:28:19 浏览:27
幼儿思维编程 发布:2025-02-05 00:18:21 浏览:25
我的世界电脑正版如何进入服务器 发布:2025-02-05 00:18:06 浏览:880
疫情防控健康码预警机制演练脚本 发布:2025-02-04 23:58:46 浏览:39
分治算法java 发布:2025-02-04 23:41:15 浏览:593
安卓app点进去就闪退怎么回事 发布:2025-02-04 23:36:56 浏览:780
宏按键编程 发布:2025-02-04 23:05:11 浏览:904
微信隐形密码在哪里设置 发布:2025-02-04 23:05:01 浏览:866