N S*_*rma 5 android broadcastreceiver android-activity
我正在学习Android概念Activity和BroadCastReceiver.我想更新的内容Activity从BroadtCastReceiver两者在不同的Java类.
它就像是
MyActivity.java 和 MyBroadtCastReceiver.java
这可以在Android中执行此操作吗?
Squ*_*onk 25
A BroadcastReceiver可以在很多方面使用,但是当涉及更新a的UI组件这样的特定事物时Activity,声明/定义BroadcastReceiver其自己的Java类文件几乎没有什么优势.
推理 - BroadcastReceiver必须具有一些先前的"知识" Activity以及为了更新UI而需要做什么.实际上,BroadcastReceiver它与Activity自身联系在一起,将它声明/定义为内部类是有意义的.
另一个重要方面是Activity需要处于"运行"(即可见)状态以保证UI组件的操作.在这种情况下,注册接收器onResume()和取消注册onPause()将有助于防止出现问题.
使用通用模板我会做类似以下的事情......
class MyActivity extends Activity {
boolean mIsReceiverRegistered = false;
MyBroadcastReceiver mReceiver = null;
// onCreate(...) here
@Override
protected void onResume() {
// Other onResume() code here
if (!mIsReceiverRegistered) {
if (mReceiver == null)
mReceiver = new MyBroadcastReceiver();
registerReceiver(mReceiver, new IntentFilter("YourIntentAction"));
mIsReceiverRegistered = true;
}
}
@Override
protected void onPause() {
if (mIsReceiverRegistered) {
unregisterReceiver(mReceiver);
mReceiver = null;
mIsReceiverRegistered = false;
}
// Other onPause() code here
}
private void updateUI(Intent intent) {
// Do what you need to do
}
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:一些额外的笔记......
BroadcastReceiver在进入和离开之间onReceive(...).一旦它从onReceive(...)实例返回,则保持休眠状态,等待下一次广播.BroadcastReceiver不是为"重物提升"而设计的.基本上该onReceive(...)方法应尽可能简单.它调用的任何方法也应该尽可能轻量级...进入,做你的东西,然后离开然后等待下一个广播.如果更新UI需要一些时间(例如,可能ListView通过重新查询数据库以获取大量数据),请考虑调用异步执行的代码(AsyncTask例如).| 归档时间: |
|
| 查看次数: |
15616 次 |
| 最近记录: |