HandlerThread的简单使用
2017-04-04 17:48
225 查看
这里只是写了个HandlerThread的简单栗子,什么也不多说。
以后有时间再说一下原理什么的。
以后有时间再说一下原理什么的。
package com.audienl.test; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.SystemClock; import android.support.annotation.AnyThread; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.TextView; import java.lang.ref.WeakReference; import java.util.Random; public class HandlerThreadActivity extends AppCompatActivity { private static final String TAG = "HandlerThreadActivity"; private TextView mTvShow; private Handler mHandler = new Handler();// UI线程的Handler private HandlerThread mHandlerThread; private HandlerThreadHandler mHandlerThreadHandler;// HandlerThread的Handler private boolean isUpdate = false; public static void start(Context context) { Intent starter = new Intent(context, HandlerThreadActivity.class); context.startActivity(starter); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handle_thread); mTvShow = (TextView) findViewById(R.id.tv_show); // 创建工作线程,并初始化其Handler。注意:一定要是线程start之后,因为Looper.prepare()在run方法里面。 mHandlerThread = new HandlerThread("update"); mHandlerThread.start(); mHandlerThreadHandler = new HandlerThreadHandler(mHandlerThread.getLooper(), this); } /** * 更新界面 */ @AnyThread private void update(int num) { mHandler.post(new Runnable() { @Override public void run() { mTvShow.setText(String.valueOf(num)); Log.i(TAG, "Update: " + num); } }); } /** * 使用静态内部类,以及弱引用,避免内存泄漏。 */ private final static class HandlerThreadHandler extends Handler { private WeakReference<HandlerThreadActivity> mActivity; public HandlerThreadHandler(Looper looper, HandlerThreadActivity activity) { super(looper); mActivity = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); HandlerThreadActivity activity = mActivity.get(); if (activity != null) { if (activity.isUpdate) { activity.update(new Random().nextInt()); SystemClock.sleep(2000); if (activity.mHandlerThreadHandler != null) { activity.mHandlerThreadHandler.sendEmptyMessage(0); } } } } } @Override protected void onStart() { super.onStart(); isUpdate = true; mHandlerThreadHandler.sendEmptyMessage(0); } @Override protected void onStop() { super.onStop(); isUpdate = false; } @Override protected void onDestroy() { super.onDestroy(); mHandlerThread.quit(); mHandlerThreadHandler = null; } }
相关文章推荐
- Android-HandlerThread简单使用
- Android HandlerThread 使用介绍及简单解析
- Android Handler、Loop 的简单使用 和 HandlerThread 总结使用
- python中使用状态机的简单例子---截取'/x00'之前的字符串
- 使用timer控件创建一个简单的报警程序
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(1)Calendar概述
- 简单使用Delphi中的TO-DO List
- 在ASP中使用简单Java类
- PHP面向对象的使用教程 简单数据库连接
- 使用Java实现对dbf文件的简单读写
- 使用C#开发一个简单的P2P应用
- 在 VB 中简单使用 HTMLHELP (*.chm) 帮助
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- 对MSNP9协议的简单使用示例
- SpringFramework中的AOP简单使用
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(2)JCalendar源代码
- 使用Delphi,SDK编写Windows简单程序
- 使用C# Builder建一个简单的ASP.NET应用程序
- 使用自定义的WebControl来构建简单的WebForm
- 了解POP3协议,使用简单的代码监控pop3邮箱,或者不用代码,直接使用telnet