【Android】HandlerThread

(1)简单使用

  • HandlerThread用来做队列同步执行
public class AsyncHandler {

    private static final HandlerThread sHandlerThread = new HandlerThread("AsyncHandler");
    private static final Handler sHandler;

    static {
        sHandlerThread.start();
        sHandler = new Handler(sHandlerThread.getLooper());
    }

    public static void post(Runnable r) {
        sHandler.post(r);
    }

    private AsyncHandler() {
    }
}
  • 测试代码
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = ((Button) findViewById(R.id.btn));
    }

    private Runnable runnable = new Runnable() {
        @Override
        public void run() {

            String name = Thread.currentThread().getName();
            Log.e(TAG, "start: "+name);

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 此处是子线程不能刷新UI控件
//            btn.setText("aaaa");
            Log.e(TAG, "end: "+name);
        }
    };


    /**
     * 同步执行执行顺序
     *     start: AsyncHandler
     *     end: AsyncHandler
     *     start: AsyncHandler
     *     end: AsyncHandler
     *     start: AsyncHandler
     *     end: AsyncHandler
     */
    public void go(View view) {

        AsyncHandler.post(runnable);
        AsyncHandler.post(runnable);

        new Thread(new Runnable() {
            @Override
            public void run() {
                AsyncHandler.post(runnable);
            }
        }).start();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容