• <Android Framework 之路>多线程


    多线程编程

    JAVA多线程方式
    1. 继承Thread线程,实现run方法
    2. 实现Runnable接口

    JAVA单继承性,当我们想将一个已经继承了其他类的子类放到Thread中时,单继承的局限就体现出来了
    但是可以实现多个接口,所以第二种方法相对于第一种来说灵活许多
    其次,通过
    new Thread(Runnable runnable).start()
    启动线程的方式,若变量在runnable中定义,多个线程可以共用,因为来自同一个对象
    比较适合多个相同程序代码的线程去处理同一资源的情况

    Android多线程方式
    主要集中在UI线程和其他线程的交互问题上
    1. Thread,Handler,Message
    2. AsyncTask
    3. Runnable

    第一种方式,new Thread()然后通过Handler sendMessage,由Handler的handleMessage方法实现对应的处理,完成与UI进程的交互

    private Handler mHandler =  new Handler(){
        public void handleMessage(Message msg) {
            /*do sth through msg */
        }
    }
    
    public BadThread extends Thread {
        private final static String TAG = this.getClass().getName();
    
        public void run() {
           /*coding*/
        }
    };
    
    new BadThread().start();

    第二种方式,异步线程的方式,doInBackground()中执行任务,onPreExecute()准备工作,onPostExecute()任务结束后调用,onProgressUpdate与publishProgress配合使用,实现和UI线程的交互

    AsyncTask mLoadingTask = new AsyncTask(){
        protected Object doInBackground(Object[] objects) {
        }
        protected void onProgressUpdate(Object[] values) {
        }
        ......
    }
    
    mLoadingTask.execute();

    第三种方式,Runnable对象,通过Handler直接Post等方法启动线程,实现与UI线程的交互

    private Runnable mRunnable = new Runnable(){
        public void run() { 
            /*do sth*/
        }
    }
    
    mHandler.post(mRunnable);
  • 相关阅读:
    在 Laravel 5.1 中使用 Pjax
    在 iOS 中实现方法链调用
    利用 WireShark 深入调试网络请求
    设计一个健壮的后台下载
    设计一个健壮的大型文件下载系统
    iOS开发基础知识:Core Animation(核心动画)
    开发 Swift 和 Objective-C 混编的 Framework
    protobuf3 iOS 接入 protobuf
    iOS之ProtocolBuffer搭建
    iOS10 推送必看(基础篇)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467211.html
Copyright © 2020-2023  润新知