Android 获取栈顶activity并在service 中弹出全局dialog解决方法
2016-07-21 13:05
766 查看
一、需求
1 -> 在service中执行定时请求接口,适当的时候显示 自定义dialog。
二、现象
2 -> 按照正常的显示dialog代码,会报android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?</span>的错误
三、解决方法
1 -> 先谈谈自己解决路上的坑,尝试了用 网上的方法 (1.通过 WindowManager 去添加 view 。 2. 设置dialog的window 的type)但是发现都不理想(其中第二种方法在4.4上成功,但是5.1上又不行了。而且是用的系统的alertdialog)。2 -> 现在上解决方法,代码如下,在自己的 Application 中去记录activity,在service 中可以通过 MyApplication.getInstance().getCurrentActivity()去调用获取当前最上面activity。此时,dialog 所需要的context 就可以满足在不确定activity
时候显示了,Done。。。
// 1.新建MyApplication public class MyApplication extends Application { private final String TAG = getClass().getSimpleName(); private static MyApplication mInstance; private Activity mActivity = null; @Override public void onCreate() { super.onCreate(); mInstance = this; // onCreate 方法中 监听activity 的生命周期 initGlobeActivity(); } private void initGlobeActivity(){ registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { // 此处记录最后的activity mActivity = activity; LogUtil.e(TAG,activity+"onActivityCreated"); } @Override public void onActivityDestroyed(Activity activity) { LogUtil.e(TAG,activity+"onActivityDestroyed"); } /** Unused implementation **/ @Override public void onActivityStarted(Activity activity) { LogUtil.e(TAG,"onActivityStarted"); } @Override public void onActivityResumed(Activity activity) { LogUtil.e(TAG,"onActivityResumed"); } @Override public void onActivityPaused(Activity activity) { LogUtil.e(TAG,"onActivityPaused"); } @Override public void onActivityStopped(Activity activity) { LogUtil.e(TAG,"onActivityStopped"); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} }); } public static MyApplication getInstance(){ return mInstance; } /** *公开方法,外部可通过 MyApplication.getInstance().getCurrentActivity() 获取到当前最上层的activity */ public Activity getCurrentActivity() { return mActivity; } }
相关文章推荐
- Notification
- android 程序启动的引导页 简单版
- Android 常用的adb命令
- Android中短信发送与接受
- 关于Android Launcher3相关优秀文章的记录
- Android内存泄漏的八种可能
- Android studio 的repositories配置
- Android Toast的完全自定义与工具类的编写
- android中一个TextView实现其中内容大小颜色不同的效果
- Android静态安全检测 -> logcat可能泄露隐私敏感信息
- Android App应用启动分析与优化
- Android与PC蓝牙交互
- Android Toolbar+DrawerLayout使用细节
- Android异常笔记
- Android XML与Json的区别
- Android 自定义标题栏BaseActivity
- Android - 线程同步 android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行
- Android常用工具类
- Android adb input命令模拟滑动 按键 点击事件
- Android 框架练成 教你打造高效的图片加载框架