不论跳转到哪个页面,来消息时弹出dialog,并跳转到消息页面

  项目中集成友盟推送消息,现在项目要求来消息时弹出dialog 用户点击确定能跳转到消息页面。

  分析需求,应用中的难题第一个是有3个状态,1.应用处于后台,也就是activity生命周期是onStop时,2.用户正在使用 3.应用已退出关闭

  第二个是实现用户正在使用时,不管处于哪个页面都需要弹出dialog 并跳转

  实际开发中 我们解决第一个难题只要处理应用处于后台后,收到推送启动app,和用户正在使用中这2种状态,处于后台也归于用户正在使用。

  理清第一个问题,只是为了确定dialog的弹出时机,不然只考虑使用中状态,会遗漏应用关闭后启动的弹出。

  那么真正的问题是如何解决不论用户处于哪个页面,推送消息到时弹出dialog,查看了网上的一些解决办法,给出的大致2种,一种是系统dialog,一种是跳转到一个透明的activity,变相的让用户觉得这是一个dialog,其实是个activity。自我感觉这两种都不太方便,于是,我想的是土办法,对,办法很土,但感觉真的挺实用,既然dialog是依附activity出现的,那么我在application类中用activity Cotext变量在加载应用时预先作为全局变量接收当前所在activity Context,因为推送消息本身就在application类中注册,也由它监听,那么再写个showDialog的方法不就可以了?so,消息即时收到,dialog也即时出现,至于不管是在哪个页面都会弹出dialog ,这个就是要你在开发应用时都继承自一个自己写的BaseActivity ,这个BaseActivity用来干一些很多页面都通用的动作,那么既然都继承了BaseActivity,我们只需要将BaseActivity的Context 在onCreate后 将Context更新到全局变量也就是application的Context变量即可实现不管你打开了哪个页面,推送消息到来时 都会弹出dialog,这个dialog因为你这个页面也继承自BaseActivity 所以上下文资源也有了,完美弹出!所以最大的问题解决了,但这只是解决了应用正在启用的状态,这个状态下你的Context资源是你已经有了,所以才能弹出dialog,那么接下来解决这个小问题,我想的办法还是土办法,标识,对,没错,我们开发中,经常需要对某个状态进行标识,以便区分接下来程序该怎么进行分流操作。在application中另外设置一个全局变量用来标识是否收到推送消息(虽然在application中频繁设置全局变量有点消耗资源,但比起用户体验,和实现难度来说,这点资源就牺牲下嘛),然后在消息到来时,在application中赋值,在应用启动的页面,onCreate方法里再判断一次,重写一次showDialog就是,这点问题难不倒我们这些程序猿,虽然我进入码农的时间也很短,但至少我还能活跃思考不是!这句话也与众位码农同勉!

  好了,现在不管应用处于什么状态,不管在哪个页面,推送消息到来时,都能即时弹出dialog,现在是处理跳转到指定页面,有同学要问了,你这都有了Context了,直接startActivity不就好了?对,各位同学,我之前也和你们一样,有了Context,那就直接startActivity呗,so,我也做了,可是在收到消息弹出对话框点击确认准备跳转页面时,报错了,log日志是不能跳转到另外的那个activity,解决办法是,将这个页面跳转的Intent,设置成NEW_TASK,也就是新的任务,才能实现跳转到该页面,这个应该是我们showDialog方法写在application中的缘故,好了,解决这个问题真的也让我想了很久,之前想的复杂化的Service就不提了,也只是个想法而已,这里不多做陈述了,已经写了很多了,如果这篇随笔对你们有帮助,是在下之荣幸,see you。

posted on 2016-01-25 13:50  传统男人  阅读(400)  评论(0编辑  收藏  举报

导航