当前位置: 首页
科技数码
告别ANR!Android中六种安全更新UI的方式

告别ANR!Android中六种安全更新UI的方式

热心网友 时间:2025-12-15
转载

想象你在另一个城市(子线程)买了礼物,想送给女朋友(UI线程)。直接扔过去会砸伤人(崩溃),必须通过快递站(主线程通信机制)。 想象你在另一个城市(子线程)买了礼物,想送给女朋友(UI线程)。直接扔

想象你在另一个城市(子线程)买了礼物,想送给女朋友(UI线程)。直接扔过去会砸伤人(崩溃),必须通过快递站(主线程通信机制)。

想象你在另一个城市(子线程)买了礼物,想送给女朋友(UI线程)。直接扔过去会砸伤人(崩溃),必须通过快递站(主线程通信机制)。以下是安全送礼指南:

方案1:最新快递站-runOnUiThread

适用场景:在Activity/Fragment中快速传递

// 子线程工作new Thread(() -> { String message = fetchMsgFromServer(); // 最新指定快递点 runOnUiThread(() -> { textView.setText(message); // 安全送达 });}).start();

优势:

• 系统自带,随用随取• 自动识别当前Activity生命周期

方案2:任意代收点-View.post

适用场景:在任何能拿到View的地方

// 在任意View可达的地方fun updateProgress(progress: Int) { Thread { val current = calculateProgress() // 随便找个View当快递柜 progressBar.post { progressBar.progress = current } }.start()}

隐藏技巧:

• 即使View还没显示也能寄存消息

• 支持延迟投递:view.postDelayed({...}, 1000)

方案3:老牌物流-Handler

适用场景:需要精准控制消息队列

// 创建主线程HandlerHandler mainHandler=new Handler(Looper.getMainLooper());void showNotification(String message) { executorService.execute(() -> { prepareNotification(message); // 精准派送 mainHandler.post(() -> { notificationView.display(message); }); });}

避坑指南:

• 记得在onDestroy时调用mHandler.removeCallbacksAndMessages(null)

• 用postDelayed实现定时刷新:mHandler.postDelayed(updateTask, 5000)

方案4:智能管家-LiveData

适用场景:MVVM架构下的数据驱动UI

// ViewModel中private val _newsLiveData = MutableLiveData>()val newsLiveData: LiveData> = _newsLiveDatafun loadNews() { viewModelScope.launch(Dispatchers.IO) { val news = repository.fetchNews() _newsLiveData.postValue(news) // 自动切到主线程 }}// Activity中newsViewModel.newsLiveData.observe(this) { news -> adapter.submitList(news) // 安全更新RecyclerView}

优势对比:

方案5:闪电侠-协程

适用场景:Kotlin项目中的异步处理

fun loadComments() { lifecycleScope.launch { val comments = withContext(Dispatchers.IO) { api.getComments(postId) } // 自动切回主线程 binding.commentList.adapter = CommentAdapter(comments) }}

性能对比:

• 传统线程:每次new Thread约消耗1MB内存

• 协程:轻量级,1KB级内存消耗

方案6:万能工-RxJava

适用场景:复杂异步流处理

Observable.fromCallable(() -> db.queryUnreadMsg()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(messages -> { badgeView.updateCount(messages.size); });

高阶用法:

// 合并多个数据源Observable.merge(networkData, localData) .filter(msg -> !msg.isDeleted) .debounce(300, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::updateUI);

好的线程管理就像优秀的交通管制,让数据在正确的时间走正确的车道!现在就去优化你的代码吧~

来源:https://www.51cto.com/article/814557.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
vivo X Fold6和荣耀折叠屏参数对比:电池续航长焦影像AI办公四个维度谁更全面

vivo X Fold6和荣耀折叠屏参数对比:电池续航长焦影像AI办公四个维度谁更全面

vivo X Fold6和荣耀折叠屏参数对比:电池续航长焦影像AI办公四个维度谁更全面一、两款万元内折叠屏的正面较量据IDC《全球折叠屏手机市场季度跟踪报告(2026年Q1)》,2025年折叠屏市场中7,000-9,000元价位段的增速显著高于万元段,成为折叠屏规模扩张的主力区间。在这个价位段,vi

时间:2026-07-14 17:25
在他人恐惧时保持贪婪 SK海力士DRAM定价与盈利依旧强劲

在他人恐惧时保持贪婪 SK海力士DRAM定价与盈利依旧强劲

最近,半导体与AI基础设施领域的一家顶级研究机构SemiAnalysis发布了一份题为《在他人恐惧时保持贪婪:SK海力士的DRAM定价与盈利依旧强劲》的报告,一下子就把市场的注意力拉回到了SK海力士身上。这份报告的核心结论相当明确:SK海力士在2026年第二季度乃至更远的未来,DRAM业务的盈利能力

时间:2026-07-14 12:45
创业板指重挫超4% 微盘股逆势涨2.5%

创业板指重挫超4% 微盘股逆势涨2.5%

7月10日尾盘,A股极端分化:创业板指与科创50均跌超4%,深成指跌逾2%,沪指跌0 8%,而微盘股逆势大涨2 5%,风格分化显著,市场避险情绪升温。

时间:2026-07-14 12:45
试驾体验对购车决策的影响 动力操控舒适成关键

试驾体验对购车决策的影响 动力操控舒适成关键

试驾体验直接影响购车决策,动力响应、操控精准度、座椅舒适性及NVH表现等细节决定长期用车幸福感。不同试驾感受对动力焦虑、驾驶信心和日常心情有显著差异,全面模拟真实场景的试驾有助于选到称心车辆。

时间:2026-07-14 12:45
比亚迪全球首个1700万辆新能源汽车下线里程碑

比亚迪全球首个1700万辆新能源汽车下线里程碑

比亚迪成为全球首家新能源汽车累计下线突破1700万辆的车企,第1700万辆车型为海豹08。这一里程碑得益于技术攻坚、产品矩阵完善及海外市场渗透,从刀片电池到DM-i等系统化技术为规模化铺路,展现产业链掌控力与迭代速度。

时间:2026-07-14 12:44
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜