Android 正在尝试使用broadcastReceiver注销

Android 正在尝试使用broadcastReceiver注销,android,broadcastreceiver,android-broadcastreceiver,Android,Broadcastreceiver,Android Broadcastreceiver,我做错了什么 活动流程: 家庭活动-->设置活动-->档案活动 在ProfileActivity中,我有LogOut按钮再次单击注销我正在做 public void onLogout() { //do this on logout button click Intent intent = new Intent(); intent.setAction("com.package.ACTION_LOGOUT"); this.sendBroadcast(intent);

我做错了什么

活动流程:
家庭活动
-->
设置活动
-->
档案活动

ProfileActivity
中,我有
LogOut
按钮<代码>再次单击注销我正在做

 public void onLogout()
{
    //do this on logout button click
    Intent intent = new Intent();
    intent.setAction("com.package.ACTION_LOGOUT");
    this.sendBroadcast(intent);

}
SettingsActivity
onCreate
中,我正在这样做

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.package.ACTION_LOGOUT");
    LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("onReceive","Logout in progress");
            //At this point we should start the login activity and finish this one.
            Intent gotoLogin = new Intent(SettingsActivity.this,Login_Activity.class);
            startActivity(gotoLogin);
            finish();
        }
    }, intentFilter);
}
我想我会从
档案活动中注销,但我没有。

此代码有什么问题。

按如下方式发送广播:

LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

使用意图标志清除活动堆栈,有关更多详细信息,请参阅此

因此,您需要实现如下所示的onLogout()方法,这样就可以开始了

public void onLogout() {
    //do this on logout button click
    Intent logoutUser = new Intent(context, Login_Activity.class);
    logoutUser.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(logoutUser);
}
注意:如果您正在使用共享首选项会话或与用户配置文件相关的本地数据库,请将其清除

我做错了什么

您正在混合两种
广播接收器。一个是全球广播,另一个是本地广播

因此,您将代码更改为:

onClick->
sendBroadcast(意图)
onCreate->
registerReceiver(…)

onClick->
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
onCreate->
LocalBroadcastManager.getInstance(this.registerReceiver)(…)


如果只需要在应用程序中广播事件,则建议使用后一个选项

这就像charm一样工作,但它清除了
Activity
LoginActivity
堆栈和
NewUserActivity
这是
LoginActivity
后面的
NewUserActivity
是的,我们正在添加标志“Intent.flag\u Activity\u CLEAR\u TASK”,因此它将清除当前任务,我猜这是注销的预期行为,请告诉我,如果我错过了任何东西,那么使用广播接收器关闭活动也不是一个好的开发实践,特别是当您想要实现注销之类的目标时,请参考我在回答中提到的链接,以找到适合您需要的适当意图标志。