android中多线程与ui,android – 主线程和UI线程之间的区别

感谢一个非常有趣的问题。

事实证明,UI和主线程不一定相同。但是,正如您引用的文档中所述,区别仅在某些系统应用程序(作为操作系统的一部分运行的应用程序)的上下文中很重要。因此,只要您不构建自定义ROM或为手机制造商定制Android,我就不用费心去做任何区别了。

答案很长:

首先,我找到了将@MainThread和@UiThread注释引入支持库的提交:

commit 774c065affaddf66d4bec1126183435f7c663ab0

Author: Tor Norbye

Date: Tue Mar 10 19:12:04 2015 -0700

Add threading annotations

These describe threading requirements for a given method,

or threading promises made to a callback.

Change-Id: I802d2415c5fa60bc687419bc2564762376a5b3ef

评论中不包含与该问题相关的任何信息,因为我没有与Tor Norbye(叹气)的沟通渠道,所以这里没有运气。

也许这些注释正在AOSP的源代码中使用,我们可以从那里获得一些见解?让我们搜索AOSP中任何一个注释的用法:

aosp $ find ./ -name *.java | xargs perl -nle 'print "in file: ".$ARGV."; match: ".$& if m{(\@MainThread|\@UiThread)(?!Test).*}'

aosp $

上面的命令会在AOSP中的任何.java文件中找到@MainThread或@UiThread的任何用法(后面没有附加的测试字符串)。它一无所获。这里也没有运气。

所以我们需要去寻找AOSP来源的提示。我猜我可以从Activity#runOnUiThread(Runnable)方法开始:

public final void runOnUiThread(Runnable action) {

if (Thread.currentThread() != mUiThread) {

mHandler.post(action);

} else {

action.run();

}

}

这里没什么特别有趣让我们看看如何初始化mUiThread成员:

final void attach(Context context, ActivityThread aThread,

Instrumentation instr, IBinder token, int ident,

Application application, Intent intent, ActivityInfo info,

CharSequence title, Activity parent, String id,

NonConfigurationInstances lastNonConfigurationInstances,

Configuration config, String referrer, IVoiceInteractor voiceInteractor)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值