完美实现账户踢出时的全局弹窗

如果我们的app支持单点登录、账户踢出功能,那么在接到后端push的需要踢出当前用户的消息后就需要弹出一个dialog。这种dialog出现的时机并不确定,而我们知道dialog的构建和activity是强相关的,解决方案是永远保存当前的activity对象。

首先,在application中持有当前的activity对象:

public class App extends Application {

    private AppCompatActivity curActivity;

    @Override
    public void onCreate() {
        super.onCreate();
        
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                curActivity = (AppCompatActivity) activity;
            }

            // ...

            @Override
            public void onActivityDestroyed(Activity activity) {
                curActivity = null;
            }
        });
    }
}
复制代码

然后,定义弹出dialog的方法:

public class App extends Application {

    private AppCompatActivity curActivity;

    public void showDialog(String title, String message) {
        EasyDialog.builder(curActivity)
                .setTitle(title)
                .setMessage(message)
                .setPositiveButton("ok", null)
                .build()
                .show(curActivity.getSupportFragmentManager());
    }
}
复制代码

最后,在需要的时候调用application中的showDialog()来完成弹窗:

((App) getApplication()).showDialog("全局弹窗", "可在任意时机弹出一个dialog")
复制代码

猜你喜欢

转载自juejin.im/post/5b764030f265da28216f65b5