我们可以在不同的活动中创建多个广播接收器吗? 像每个活动有1个广播接收器,并在清单中注册。 我尝试并且工作得很好,但我的问题是它的好坏与消耗更多的内存?或者我如何通过创建一个处理所有进程的广播接收器来消除它。就像我想存储不同的短信我的应用程序有不同的状态,我通过短信收到。所以我在不同的活动创造了不同的广播接收器 我还为接收器添加了一些代码
public static class SmsReceiver extends BroadcastReceiver {
String a = "";
DataBaseHandler db;
@Override
public void onReceive(final Context context, final Intent intent) {
db = new DataBaseHandler(context);
if (!intent.getAction().equals(
"android.provider.Telephony.SMS_RECEIVED"))
return;
else if (intent != null) {
Bundle bndl = intent.getExtras();
SmsMessage[] msg = null;
String abc = "";
String msgs = "";
if (null != bndl) { // if start
Object[] pdus = (Object[]) bndl.get("pdus");
msg = new SmsMessage[pdus.length];
for (int i = 0; i < msg.length; i++) {
msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
if (msg[i].getOriginatingAddress().equals("15555215556"))
{
abc = msg[i].getOriginatingAddress();
msgs = msg[i].getMessageBody().toString();
}
}
if (abc != "" && ! msgs.equals(""))
{ // inner if start
String[] str_split = msgs.split("\\n|:|,");
String temp = str_split[0].substring(str_split[0].lastIndexOf(' ') + 1).trim();
ArrayList<String> numb =new ArrayList<String>();
if (temp.equals("DEACTIVATED") || temp.equals(" ACTIVATED") )
{
String numbs ;
for (int j = 1; j < 10; j++) {
numbs = str_split[j].substring(str_split[j].lastIndexOf(',') + 1).trim();
numb.add(numbs);
}
for (int i = 1; i < numb.size(); i++)
a += i + " " + numb.get(i) + "\n";
db.update_sys_pwd(temp);
}
else
{
return;
}
}// inner if over
} // if over
}
} // onReceive over
}
请帮助我,因为我从不使用电话,GSM API。 或者我如何创建1个接收器来处理更新数据的所有其他接收器。喜欢在1个接收器中注册所有广播接收器,然后将其设置为清单文件。
提前致谢。
答案 0 :(得分:0)
最好让单个BroadcastReceiver处理单个事件(SOLID原则)。但是,您可以注册多个接收器,每个接收器接收不同的事件 您的代码中还有另一个问题 - BroadcastReceiver正在主线程上运行,Android假设BroadcastReceiver中的代码将很快完成。您不应该在其中执行任何长时间运行的操作(写入数据库)。而是通过Intent
传递接收的值来获取接收的数据并启动IntentService以处理该数据