Flo*_*low 38 concurrency multithreading android broadcastreceiver
如果我有一个BroadcastReceiver在我的类中扩展的内部Service类,当BroadcastReceiver类读取/写入类中的对象时,我是否应该关心同步Service?或者换另一种说法:是BroadacstReceiver的onReceive()方法在一个额外的线程开始了吗?
小智 40
onReceive()方法总是在主线程(也称为"UI线程")上调用,除非您使用registerReceiver()变量请求在不同的线程上调度它:
Context.registerReceiver(BroadcastReceiver receiver,
IntentFilter filter,
String broadcastPermission,
Handler scheduler)
Run Code Online (Sandbox Code Playgroud)
Can*_*ner 21
Android的BroadcastReceivers是否在新线程中启动?
通常但并非总是如此,这完全取决于您如何注册.
如果您注册BroadcastReceiver使用:
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
Run Code Online (Sandbox Code Playgroud)
它将在主活动线程(也称为UI线程)中运行.
如果您在其他线程上注册BroadcastReceiver使用有效的Handler运行:
registerReceiver (BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
Run Code Online (Sandbox Code Playgroud)
它将在你的上下文中运行 Handler
例如:
HandlerThread handlerThread = new HandlerThread("ht");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
context.registerReceiver(receiver, filter, null, handler); // Will not run on main thread
Run Code Online (Sandbox Code Playgroud)
Ste*_*han 18
在主线程上调用onReceive()方法.因此,如果您对所有服务类的访问都是在主线程内完成的,则不需要任何同步.
| 归档时间: |
|
| 查看次数: |
20369 次 |
| 最近记录: |