开发一个监控系统(具体什么就不说了),通过socket与后台程序进行通讯,先碰到以下问题,求解
先说下大体思路:登陆界面登陆后startservice,service打开线程进行socket通讯,前台activity通过broadcast
与service通讯。现有以下问题求解:
1.当接受到服务器端发来的某些信息时,有多个activity的ui需要更新,当前显示的actticity不用说了,但是处于stop
状态的activity怎么更新ui呢?这个包括用户点击了home键,报警界面也隐藏了怎么更新?
2.当程序登陆完成以后,并进入了某个页面,然后点击了home键,这时怎样能记住用户刚才打开的页面并进入呢?我的程序
又打开了登陆界面。
3.程序的service在那里stop较好呢?我是希望所有的登陆的acitivity都推出以后就停止掉,这个怎么能够检测到呢?
暂时就这个,希望有大大来指点下。。

解决方案 »

  1.   

    1、通过service发送广播给一个专门用于启动Activity的广播接收机,由这个接收机启动Activity2、在service定义一个方法,用于设置当前的Activity编号,每个Activity启动时调用service的方法去标记当前的Activity的编号,当要用Activity时,通过这个编号再去启动相应的Activity;3、在service定义一个Activity数量统计的变量对象,并设置相应的方法,每启动一个Activity就调用service的方法使变量加1,每关闭一个Activity就调用service方法使变量减1,当变量为0时,退出。
      

  2.   

    1.
      方法A.发intent,所有接受intent的activity,去更新UI.
      方法B.如果是读数据库的话,可以设置noContentChanged,来读取数据库内容,然后更新。
    2.
      定义常量,给每个Activity一个标记,在每个activity resume的时候,写sharedpref。
      登陆后,读sharedpref,来启动对应的activity.
    3.
      Application的,ActivityLifecycleCallbacks,注册后,当有activity状态变化后,会调用。可以在这里统计
      

  3.   

    非常感谢,看来2,3和我自己想的差不多,都是编程技巧来解决了。
    关于第一个还是有点疑问,我接受到信息之后不是要启动activity,而是改变他的UI。
    2楼说发送Intent,所有接收到的activity去更新ui,也就是说我有一条信息接收到之后两个activity都要根据这个信息去更新ui,因为这两个activity必然有一个是stop状态的,也就是说,处于stop状态的activity也同让可以更改ui?同时,这两个activity的注销广播也要放到onDestroy里面去注销了?
      

  4.   

    看到1楼说的第二点,补充一个问题,如果是用service去记录变量,当第一次运行程序的时候startservice之后,马上发送broadcast,service能接收到么?
    因为好像从哪里看到过,说startservice之后有一段时候service才能启动完成并且接受消息,不知道是不是这个样子?
      

  5.   

    在stop状态下的Activity,是处于不可见状态,既然不可见,为什么还要更新UI?
    更新UI的时机应该是这个Activity下次重新进入的时候
      

  6.   


    是的,会去更新的,因为stop状态的activity,他的实例还是在的,所以你可以去设置UI.
      

  7.   

    因为我是用broadcast来作为activity和service的通讯的,如果socket收到消息不同时更新的话,等到acitivity起来以后broadcast已经过去了,怎么根据broadcast更新呢?