当前位置: 首页 > wzjs >正文

自媒体运营主要做什么站长工具seo综合查询 分析

自媒体运营主要做什么,站长工具seo综合查询 分析,手机网站域名注册,wordpress主题如何导入演示Android 中 Handler 的用法详解 Handler 是 Android 中用于线程间通信的重要机制,主要用于在不同线程之间发送和处理消息。以下是 Handler 的全面用法指南: 一、Handler 的基本原理 Handler 基于消息队列(MessageQueue)和循环器(Looper)工作&#xff…

Android 中 Handler 的用法详解

Handler 是 Android 中用于线程间通信的重要机制,主要用于在不同线程之间发送和处理消息。以下是 Handler 的全面用法指南:

一、Handler 的基本原理

Handler 基于消息队列(MessageQueue)和循环器(Looper)工作,主要组成:

  • Message:携带数据的消息对象
  • MessageQueue:消息队列,存储待处理的消息
  • Looper:消息循环,不断从队列取出消息处理
  • Handler:发送和处理消息的接口

二、基本用法

1. 创建 Handler(主线程)

// 在主线程创建Handler会自动关联主线程的Looper
Handler mainHandler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {// 处理消息switch (msg.what) {case 1:String text = (String) msg.obj;textView.setText(text);break;}}
};

2. 发送消息

// 发送空消息
handler.sendEmptyMessage(1);// 发送带what的消息
Message msg = handler.obtainMessage();
msg.what = 2;
msg.obj = "Hello Handler";
handler.sendMessage(msg);// 延迟发送
handler.sendEmptyMessageDelayed(1, 1000); // 1秒后发送
handler.sendMessageDelayed(msg, 2000); // 2秒后发送

3. 在子线程使用 Handler

new Thread(() -> {// 为当前线程创建LooperLooper.prepare();Handler threadHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// 处理子线程消息}};// 开始消息循环Looper.loop();
}).start();

三、Handler 的常见使用场景

1. 更新 UI

new Thread(() -> {// 模拟耗时操作try {Thread.sleep(1000);// 通过Handler发送消息到主线程更新UIMessage msg = mainHandler.obtainMessage();msg.what = 1;msg.obj = "更新后的文本";mainHandler.sendMessage(msg);} catch (InterruptedException e) {e.printStackTrace();}
}).start();

2. 定时任务

// 延迟执行
handler.postDelayed(() -> {Toast.makeText(this, "5秒后执行", Toast.LENGTH_SHORT).show();
}, 5000);// 循环执行
final Runnable runnable = new Runnable() {@Overridepublic void run() {// 执行任务Log.d("Handler", "每隔1秒执行");// 再次post实现循环handler.postDelayed(this, 1000);}
};
handler.postDelayed(runnable, 1000);// 取消定时任务
handler.removeCallbacks(runnable);

3. 线程间通信

// 工作线程
class WorkerThread extends Thread {public Handler workerHandler;@Overridepublic void run() {Looper.prepare();workerHandler = new Handler(Looper.myLooper()) {@Overridepublic void handleMessage(Message msg) {// 处理来自主线程的消息String task = (String) msg.obj;Log.d("WorkerThread", "执行任务: " + task);// 可以回传结果给主线程Message resultMsg = mainHandler.obtainMessage();resultMsg.what = 2;resultMsg.obj = task + " 完成";mainHandler.sendMessage(resultMsg);}};Looper.loop();}
}// 主线程发送任务给工作线程
WorkerThread worker = new WorkerThread();
worker.start();// 等待workerHandler初始化
new Handler().postDelayed(() -> {if (worker.workerHandler != null) {Message msg = worker.workerHandler.obtainMessage();msg.obj = "下载文件";worker.workerHandler.sendMessage(msg);}
}, 1000);

四、高级用法

1. 使用 HandlerThread

// 创建HandlerThread
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();// 获取HandlerThread的Looper创建Handler
Handler threadHandler = new Handler(handlerThread.getLooper()) {@Overridepublic void handleMessage(Message msg) {// 在后台线程处理消息}
};// 发送消息
threadHandler.post(() -> {// 在HandlerThread中执行
});// 退出时释放资源
handlerThread.quitSafely();

2. 避免内存泄漏

// 使用静态内部类+弱引用
private static class SafeHandler extends Handler {private final WeakReference<Activity> activityRef;public SafeHandler(Activity activity) {super(Looper.getMainLooper());this.activityRef = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {Activity activity = activityRef.get();if (activity != null && !activity.isFinishing()) {// 安全处理消息}}
}// 在Activity中使用
private SafeHandler safeHandler = new SafeHandler(this);

3. 使用 Message 的优化

// 复用Message对象(推荐)
Message msg = handler.obtainMessage(WHAT_ARG, obj);
handler.sendMessage(msg);// 设置回调代替继承Handler
handler.sendMessage(Message.obtain(handler, () -> {// 回调处理
}));

五、注意事项

  1. 线程安全:Handler 与创建它的线程绑定,不能跨线程直接使用
  2. 内存泄漏:非静态 Handler 内部类会持有外部类引用,Activity 销毁时要移除回调
  3. Looper 准备:子线程使用 Handler 必须先调用 Looper.prepare()
  4. 消息堆积:避免发送过多消息导致消息队列堵塞
  5. 及时清理:在 onDestroy() 中移除所有回调
@Override
protected void onDestroy() {super.onDestroy();handler.removeCallbacksAndMessages(null);if (handlerThread != null) {handlerThread.quitSafely();}
}
http://www.dtcms.com/wzjs/26663.html

相关文章:

  • 武汉市青山区建设局网站杭州网站搜索排名
  • 南昌有没有做企业网站和公司网络优化工具
  • 域名网站空间市场营销八大营销模式
  • 个人网站建设价格表如何做好百度推广
  • 电视剧怎么做短视频网站搜狗推广登录平台官网
  • 生鲜网站建设规划书样板深圳短视频推广
  • 网站域名解析教程湖南长沙seo
  • 建筑设计接单平台上海专业的seo推广咨询电话
  • 马云将来淘汰的十个行业网站建设个人模板建站
  • 宁波自助建站模板企点客服
  • 做网站的软件micro合肥网站建设优化
  • 大型网站建设报价方案软文什么意思范例
  • 中国工程建设管理协会网站搜狗推广登录
  • 网站建设改版方案企业网站营销的优缺点
  • 有什么可以做翻译的网站互联网销售模式
  • 白鹭引擎做h5网站公司网站制作教程
  • 栖霞网站设计roseonly企业网站优化
  • 济南营销网站建设网络营销的平台有哪些
  • 企业网站建设58同城企业网络营销策划书范文
  • 福建建设厅安全员报名网站海南百度竞价推广
  • 做往外批发的网站吗免费网页制作平台
  • logo设计网站排行榜网络推广网站推广淘宝运营商
  • 国美在线网站域名建设搜索引擎优化的含义和目标
  • 淮安新港建设有限公司网站网站收录批量查询
  • 有什么网站可以做微信支付全网搜索关键词查询
  • 新品发布会推广词seo站长网
  • 昆山网站制作昆山网站建设陕西百度代理公司
  • 青海企业网站建设开发seo专业培训需要多久
  • 无为网站建设官方网站营销
  • pc网站建设需要提供哪些资料360提交网站收录入口