发表于: 2017-03-02 23:52:42
1 853
今天完成的事情:看了BroadcastReceiver的内容,看面试题
广播的分类,按传播顺序:标准广播和有序广播
标准广播是异步传播,所有接收器可以同时接收到广播
有序广播是同步传播,接收器按优先级(priority)高低依次接受广播,优先级的值越高,越先接收到广播,并且可以对广播进行拦截,不让之后的接收器接收到广播。
按作用范围:全局广播和本地广播
全局广播可以被手机上的其他App接受到,本地广播只可以被发出该广播的App接收到。
广播接收器只有在注册之后才能接收到广播,注册的方式有两种:静态注册和动态注册。
静态注册在AndroidManifest.xml文件中进行注册,所有即使App没有被启动,该接收器也可以接收到广播,一般用来进行开机启动等操作
动态注册一般在Activity中进行,所以只有在该Activity启动后,广播接收器才可以收到广播。
广播是通过intent进行发送的,因此可以借助intent进行参数的传递。
实现了一个简单的强制下线的功能,在BaseActivity中进行BroadCastReceiver的注册,之后所有的Activity都要继承BaseActivity,这样才能保证在每一个界面都可以收到强制下线的广播。一般在onResume()方法中进行广播的注册,在onPasuse()方法中解除广播的注册。因为同一时间只需要一个广播接收器可以收到强制下线的广播就可以了,并且正在和用户交互的那个Activity可以弹出警告窗口就可以。所以在onResume()方法中进行注册广播接收器,一旦退出栈顶的位置,就可以解除广播接收器了。
但是广播需要谁来发送呢?每一个Activity也都必须具备发送强制下线广播的功能,比较Low的方法就是进入某个界面时,从服务器检查一下是否在其他地方登陆了,如果登陆了,就发送一条广播。
比较好的方法,个人认为是长连接,就和消息推送一样,一旦服务器中有账号异地登陆的消息,就立刻通知App,然后发送广播,但是实现方法没有思路,需不需要创建一个服务,用该服务专门发送广播?
明天计划的事情:看书,看面试题
遇到的问题:
收获:检查手机网络是否可用的方法:
ConnectivityManager manager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = networkInfo.isAvailable(); 该boolean值即为是否有网络。
网络状态发生变化系统发出的广播:android.net.conn.CONNECTIVITY_CHANGE
手机开机时系统发出的广播:android.intent.action.BOOT_COMPLETED
评论