zoukankan      html  css  js  c++  java
  • Android 线程

    1. 当应用启动,系统会创建一个主线程,也叫UI线程,系统对每个UI组件的调用事件都在UI线程中分发出去,而不会为每个UI单独建立线程,这种单线程模型有两个准则:
      • 不要阻塞UI线程
      • 不能在UI线程之外访问Android UI

    2. 下面方法可以将执行放在UI线程,但不常用
      • Activity.runOnUiThread(Runnable)
      • View.post(Runnable)
      • View.postDelayed(Runnable, long)

    3. Handler类的主要作用:
      • 在新启动的线程中发送消息,调用sendMessage系列函数
      • 在主线程中获取,处理消息,当新线程发送消息时,主线程会回调handleMessage方法进行处理
        Handler

    4. 要使用Handler线程中还要有一个Looper对象,负责管理MessageQueue,不间断的从MessageQueue中取出消息分发给Handler来处理,注意UI线程中已经初始了一个Looper对象,程序直接创建Handler即可,自己启动的线程,必须自己去创建Looper对象并启动它,自定义线程使用Handler和Looper的过程如下:
      • 调用Looper.prepare() 创建一个Looper对象
      • 创建Handler对象并重写handleMessage方法
      • 调用Looper的loop方法来启动Looper
    5. 一个线程只能有一个Looper,但可以有多个Handler对象,每个Handler发送的消息由这个Handler本身处理。ActivityThread中定义了一个Handler,用于与ApplicationThread通信
    6. 异步任务AsyncTask,通常要实现AsyncTask的如下方法:
      • onPreExecute:执行异步任务之前的时候执行,并且在UI线程中执行,通常在这个方法里做一些UI控件的初始化的操作
      • doInBackground:在onPreExecute后执行,android会在后台的线程池中开启一个work thread来执行我们的方法,之后会把执行结果发送给onPostExecute方法
      • onProgressUpdate:在doInBackground方法中调用publishProgress方法更新任务进度时会触发该方法
      • execute:执行task
        实现AsyncTask

    7. 使用AsyncTask时必须遵守如下规则:
      • 必须在UI线程中初始化AsyncTask的实例
      • 必须在UI线程中调用AsyncTask的execute方法
      • AsyncTask的onPreExecute,onPostExecute,doInBackground,onProgressUpdate方法不能由程序员自己调用,而是由Android系统负责调用
      • 每个AsyncTask只能执行一次,多次调用将引发异常

  • 相关阅读:
    252个基本词根详解
    记忆宫殿|一个故事轻松记忆常见252个英语字根(190~252)
    海外旅游最常用的100句英语口语
    与老外见面的10大经典句
    ReportManager
    ContextLoader
    Workflow License invalid!!
    JD-GUI
    DJ Java Decompiler
    AndroChef Java Decompile
  • 原文地址:https://www.cnblogs.com/phenixyu/p/3969094.html
Copyright © 2011-2022 走看看