1

好吧,我有一个扩展广播接收器的类,它正在监听消息。现在,每当它收到一条消息时,我都会创建我的应用程序的一个新实例。所以当我关闭它时,我必须点击返回按钮 2 次。谁能帮我?

public class SMSReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
    Bundle myBundle = intent.getExtras();
    SmsMessage [] messages = null;
    String strMessage = "";
    String phoneNumber = "";

    if (myBundle != null) {
        Object [] pdus = (Object[]) myBundle.get("pdus");
        messages = new SmsMessage[pdus.length];

        for (int i = 0; i < messages.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            strMessage += "SMS From: " + messages[i].getOriginatingAddress();
            strMessage += " : ";
            strMessage += messages[i].getMessageBody();
            strMessage += "\n";

            phoneNumber = messages[i].getDisplayOriginatingAddress();
        }

        if (phoneNumber.equals("T-Mobile")) {
            Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();
            abortBroadcast();
        }

    }
}
}
4

2 回答 2

3

如果活动的实例已经存在于当前任务的顶部,系统将通过调用其 onNewIntent() 方法将意图路由到该实例,而不是创建活动的新实例。Activity可以被实例化多次,每个实例可以属于不同的任务,一个任务可以有多个实例(但前提是后栈顶的Activity不是该Activity的现有实例)。

设置这样

意图.addFlags(意图.FLAG_ACTIVITY_CLEAR_TOP);

或者

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

避免一个 Activity 的多个实例。谢谢

有关更多详细信息和知识,这里有一个非常好的博客,它将为您提供指导。

于 2012-07-13T20:32:39.717 回答
1

首先,我真的不认为它正在创建您的应用程序的新实例。更有可能发生的是一项活动被带到了最前面。我认为您应该查看清单或将其发布,以便我们可以看到广播是如何被引导的。可能广播的目标也具有启动活动的效果。所以检查清单,广播接收器中没有任何东西会导致这种情况。话虽如此,这取决于 Android 操作系统何时显示。但就两个实例而言。那只是没有发生。

PS。我不知道确切的原因,但我会说可能不会从广播接收器发出 Toast,而是使用 startActivity() 与活动通信。

于 2012-07-13T19:05:21.970 回答