Android 中三种启用线程的方法总结

在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?

首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。

而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。

HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。

与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。

Handler是沟通Activity 与Thread/runnable的桥梁。而Handler是运行在主UI线程中的,它与子线程可以通过Message对象来传递数据

1、首先第一种启用方法是通过继承Thread类,并改写run方法来实现一个线程

public class MyThread extends Thread { 

  //继承Thread类,并改写其run方法
  private final static String TAG = "My Thread ===> ";
  public void run(){
    Log.d(TAG, "run");
    for(int i = 0; i<100; i++)
    {
      Log.e(TAG, Thread.currentThread().getName() + "i = " + i);
    }
  }
} 

启动

new Thread(new MyRunnable()).start();

2、第二种启用方式创建一个Runnable对象

public class MyRunnable implements Runnable{
  private final static String TAG = "My Runnable ===> "; 

  @Override
  public void run() {
    // TODO Auto-generated method stub
    Log.d(TAG, "run");
    for(int i = 0; i<1000; i++)
    {
      Log.e(TAG, Thread.currentThread().getName() + "i = " + i);
    }
  }
} 

启动

new Thread(new MyRunnable()).start();

另外一种启用方式

 btn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        new Thread(new Runnable() {
          @Override
          public void run() {
            try {
              ...
            } catch (Exception e) {
              e.printStackTrace();
            }
          }
        }).start();
      }
    });

3、第三种启用方式通过Handler启动线程

public class MainActivity extends Activity {
  private final static String TAG = "UOfly Android Thread ==>";
  private int count = 0;
  private Handler mHandler = new Handler();
  private Runnable mRunnable = new Runnable() {
    public void run() {
      Log.e(TAG, Thread.currentThread().getName() + " " + count);
      count++;
      setTitle("" + count);
      // 每3秒执行一次
      mHandler.postDelayed(mRunnable, 3000); //给自己发送消息,自运行
    }
  };
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 通过Handler启动线程
    mHandler.post(mRunnable); //发送消息,启动线程运行
  } 

   @Override
     protected void onDestroy() {
       //将线程销毁掉
       mHandler.removeCallbacks(mRunnable);
       super.onDestroy();
     }    

}

以上这篇Android 中三种启用线程的方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 全面总结Android中线程的异步处理方式

    一.概述 Handler . Looper .Message 这三者都与Android异步消息处理线程相关的概念.那么什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环.若消息队列为空,线程则会阻塞等待. 说了这一堆,那么和Handler . Looper .Message有啥关系?其实Looper负责的就是创建一个MessageQueue,然后进入一个无限循环体不断

  • 如何正确使用Android线程详解

    前言 对于移动开发者来说,"将耗时的任务放到子线程去执行,以保证UI线程的流畅性"是线程编程的第一金科玉律,但这条铁则往往也是UI线程不怎么流畅的主因.我们在督促自己更多的使用线程的同时,还需要时刻提醒自己怎么避免线程失控. 多线程编程之所以复杂原因之一在于其并行的特性,人脑的工作方式更符合单线程串行的特点.一个接着一个的处理任务是大脑最舒服的状态,频繁的在任务之间切换会产生"头痛"这类系统异常.人脑的多任务和计算机的多任务性能差异太大导致我们在设计并行的业务逻辑之

  • Android 中三种启用线程的方法总结

    在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应. 而Runnable是一个接口,Thread是Runnable的子类.所以说,他俩都算一个进程. HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环

  • Android中3种图片压缩处理方法

    Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中. 2:流的形式:二进制形式存在与内存中. 3:Bitmap的形式 三种形式的区别: 文件形式和流的形式:对图片体积大小并没有影响.也就是说,如果你手机SD卡上的图片通过流的形式读到内存中,在内存中的大小也是原图的大小. 注意:不是Bitmap的形式. Bitmap的形式:图片占用的内存会瞬间变大. 以下是代码的形式: /** * 图片压缩的方法总结 */ /* * 图片压缩的方法01:质量压缩方法 */ private Bi

  • Android中三种注入事件方法比较

    方法1:使用内部APIs 该方法和其他所有内部没有向外正式公布的APIs一样存在它自己的风险.原理是通过获得WindowManager的一个实例来访问injectKeyEvent/injectPointerEvent这两个事件注入方法. 复制代码 代码如下: IBinder wmbinder = ServiceManager.getService( "window" ); IWindowManager m_WndManager = IWindowManager.Stub.asInter

  • vue中三种调用接口的方法

    目录 1. this.$api.LeadershipScreen.getImportantRiskList(params) 2.需要引用 3.axios(需要先安装axios) 4.配置request 1. this.$api.LeadershipScreen.getImportantRiskList(params) 在api文件下层级关系如下图: 在index.js下 // 导入所有接口 import api from './api' const install = Vue => { if (

  • Android中几种图片特效的处理的实现方法

     Android中几种图片特效的处理 这里有放大缩小图片,获得圆角图片,获得带倒影图片的几种方法及实现代码, package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; i

  • Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)

      方法一: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏状态栏 getWindow().setFlags(WindowManager

  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    目录 前言 一.缓存穿透 二.缓存击穿 三.雪崩现象 总结 前言 本文主要阐述redis中的三种现象 1.缓存穿透 2.缓存击穿 3.雪崩现象 本文主要说明本人对三种情况的理解,如果需要知道redis基础请查看其他博客,加油! 一.缓存穿透 理解:何为缓存穿透,先要了解穿透,这样有助于区分穿透和击穿,穿透就类似于伤害一点一点的累计,最终打到穿透的目的,类似于射手,一下一下普通攻击,最终杀死对方,先上图 先来描述一下缓存穿透的过程: 1.由于我们取数据的原则是先查询redis上,如果redis上有

  • Python中三种时间格式转换的方法

    目录 一 时间元组 二 字符串与时间戳 三 时间的加减用法 一 时间元组 1. 时间元组和时间戳的互化 import time,datetime # 获取当前时间的时间元组 t = time.localtime() print(t) # 时间元组转时间戳 timestamp = time.mktime(t) print(timestamp) # time.struct_time(tm_year=2019, tm_mon=10, tm_mday=23, tm_hour=23, tm_min=15,

  • Android中实现延时执行操作的方法小结

    在Android开发中我们可能会有延时执行某个操作的需求,例如我们启动应用的时候,一开始呈现的是一个引导页面,过了两三秒后,会自动跳转到主界面.这就是一个延时操作. 下面是实现延时执行操作的几种方法: 1.使用线程的休眠实现延时操作 new Thread() { @Override public void run() { super.run(); Thread.sleep(3000);//休眠3秒 /** * 要执行的操作 */ } }.start(); 2.使用TimerTask实现延时操作

  • Android 打包三种方式实例详解

     Android 打包三种方式实例详解 前言: 现在市场上很多app应用存在于各个不同的渠道,大大小小几百个,当我们想要在发布应用之后统计各个渠道的用户下载量,我们就要进行多渠道打包. 01.应用的打包签名什么是打包? 打包就是根据签名和其他标识生成安装包. 签名是什么? 1.在android应用文件(apk)中保存的一个特别字符串 2.用来标识不同的应用开发者:开发者A,开发者B 3.一个应用开发者开发的多款应用使用同一个签名 就好比是一个人写文章,签名就相当于作者的署名. 如果两个应用都是一

随机推荐