关于Android Handler机制的封
来源:互联网 发布:php支付系统源码 2016 编辑:程序博客网 时间:2024/05/21 21:39
Android 与 Java最大的不同在于Handler机制, 通常比较耗时的操作例如网络IO或各种复杂的计算等都是新开子线程中进行的, 若放在主线程中,若超时会导致ANR错误, 但是子线程又不允许更新UI内容, 为了解决这个矛盾Android 巧妙的设计了Handler机制, 因为以前接触的部分项目均为与条码相关的项目,有些Android设备在进行条码扫描时,扫描的驱动会通过Handler机制发送Message对象来实现,因为在Activity中频繁的用到Handler,所以为了提高代码的复用性,想针对条码设备的Handler机制进行封装以提高开发的效率, 在网上搜索过此类问题的解决方案没有找到太多有价值的信息,经过自己对Handler的理解提出以下解决办法,若有不妥之处,或更好的解决方案希望大家能指正留言,不吝赐教,谢谢
package com.fzhang.util;import android.content.Context;import android.os.Handler;import android.os.Message;import android.os.RemoteException;import android.os.Vibrator;import com.mobilead.decodemanager.DecodeManager;import com.mobilead.decodemanager.barcode.DecodeResult;import java.io.IOException;/** * Created by fzhang on 2016/12/9. */public class M80Util { public Context context; private Handler mHandler; private Runnable runnable; private String barcode; private DecodeManager decodeManager; private static final long[] VIBRATE_FAILED = {100, 400, 100, 400}; private static final long[] VIBRATE_SUCESS = {100, 400}; private Vibrator vibrator = null; public M80Util(final Context context, final Runnable runnable) { this.context = context; //将handler对象与对应context的主Looper进行绑定 new Thread(new Runnable() { @Override public void run() { mHandler = new Handler(context.getMainLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case DecodeManager.MESSAGE_DECODER_COMPLETE: DecodeResult result = (DecodeResult) msg.obj; barcode = result.barcodeData; runnable.run(); break; case DecodeManager.MESSAGE_DECODER_FAIL: break; } } }; decodeManager = new DecodeManager(context,mHandler); SoundManager.getInstance(); SoundManager.initSounds(context); SoundManager.loadSounds(); vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); } }).start(); } public Handler getmHandler() { return mHandler; } public void setmHandler(Handler mHandler) { this.mHandler = mHandler; } public void decode() { try { this.decodeManager.doDecode(3000); } catch (RemoteException e) { e.printStackTrace(); } } public String getBarcode() { return barcode; } public void close() { try { decodeManager.release(); SoundManager.cleanup(); decodeManager = null; } catch (IOException e) { e.printStackTrace(); } } public void good() { SoundManager.playSound(1, 1); vibrator.vibrate(VIBRATE_SUCESS, -1); } public void nogood() { SoundManager.playSound(2, 1); vibrator.vibrate(VIBRATE_FAILED, -1); }}
调用的代码如下:
package com.jyjs.Activity;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.fzhang.util.M80Util;import com.jyjs.R;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.OnClick;public class MainActivity extends AppCompatActivity { long sta = 0, end = 0; Handler handler;//未封装以前需要编写初始化每个Activity的Handler的大量代码 M80Util m80Util;//扫描解码工具类 @BindView(R.id.button2) Button btn_start; @BindView(R.id.button3) Button btn_end; @BindView(R.id.tv_1) public TextView tv_1; Runnable runnable = new Runnable() { @Override public void run() { tv_1.setText("fuck Android!!!"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); m80Util = new M80Util(MainActivity.this,new Runnable(){ @Override public void run() { tv_1.setText(m80Util.getBarcode()); } }); handler = m80Util.getmHandler(); } @Override protected void onPause() { super.onPause(); m80Util.close(); } @OnClick(R.id.button2) public void btn_start() { m80Util.decode();//解码 m80Util.good();//解码正确产生提示音和一次震动 } @OnClick(R.id.button3) public void btn_end() { Toast.makeText(MainActivity.this, "Clear", Toast.LENGTH_SHORT).show(); tv_1.setText(""); m80Util.nogood();//产生不正确提示音和两次震动 }}另外若其他子线程中需要修改UI内容的直接可通过handler.post(runnable)方式直接实现
如此完成了对Handler机制的简单封装
0 0
- 关于Android Handler机制的封
- 关于Android中的Handler 机制
- Android的Handler机制
- android 的handler 机制
- Android的handler机制
- android的handler机制
- Android的Handler机制
- Android的Handler机制
- Android的Handler机制
- android的handler机制
- Android的Handler机制
- 关于handler机制的总结
- 关于handler机制的原理
- 关于Android的Handler
- 关于 Android 异步消息处理机制 Handler
- 关于Android中的Handler消息机制
- Android Handler机制的原理
- [Android]Handler的消息机制
- 【android学习笔记】scaleType属性与ImagView中图片的显示的关系
- sdut acm 编码
- cookie实现购物车与session的登录判断
- 初中OJ1574. 【提高】X-因子链
- 纪中2016.12.10比赛总结
- 关于Android Handler机制的封
- CCS6.0的代码自动提示
- Java枚举
- 2016最新整理的Android面试题
- 人脸特征点检测:VanillaCNN
- C++使窗口全屏/最小化
- Idea SpringMVC项目读取.properties文件
- C语言 指针的细枝末节
- 260.数数小木块