安卓广播超时的原因分析及优化建议

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓广播超时的原因分析及优化建议相关的知识,希望对你有一定的参考价值。

参考技术A 最终工作中经常碰到广播超时的问题,于是花精力总结了一番,各位客官请看~

从图中可以看出决定广播B接受者的广播接受是否超时,取决于广播A处理的时间和广播B处理的时间

Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固

1.常驻型广播
 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到。
 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊。

通常说这样的方式是静态注冊
 以下是配置样例

2<receiver android:name=".widget.DeskWidgeWeather">   
3<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_weather_provider" />   
4<intent-filter>   
5 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>   
6 <action android:name="action_weather"/>   
7</intent-filter>   
8lt;/receiver>  

2.很驻型广播
  当应用程序结束了,广播自然就没有了,比方你在activity中的onCreate或者onResume中注冊广播接收器
  在onDestory中卸载广播接收器。这样你的广播接收器就一个很驻型的了。

这样的也叫动态注冊。
  比方写一个监听SDcard状态的广播接收器

9SdcardStateChanageReceiver sdcardStateReceiver;   
[email protected]  
11protected void onCreate(Bundle savedInstanceState)   
12{   
13 super.onCreate(savedInstanceState);   
14 IntentFilter filter = new IntentFilter();   
15 filter.addAction(Intent.ACTION_MEDIA_REMOVED);   
16 filter.addAction(Intent.ACTION_MEDIA_EJECT);   
17 filter.addAction(Intent.ACTION_MEDIA_MOUNTED);   
18 filter.addDataScheme("file");   
19 sdcardStateReceiver = new SdcardStateChanageReceiver();    
20 registerReceiver(sdcardStateReceiver,filter);   
21}   
[email protected]  
23protected void onDestroy(){   
24 unregisterReceiver(sdcardStateReceiver);   
25}   
26class SdcardStateChanageReceiver  extends BroadcastReceiver{   
27  
28 @Override  
29 public void onReceive(Context context, Intent intent)   
30 {   
31  String state=android.os.Environment.getExternalStorageState();   
32  System.out.println("SDCard 发生改变! 状态:"+state);   
33  //checkSDCard();   
34 }   
35 public void checkSDCard(){   
36  String state=android.os.Environment.getExternalStorageState();   
37  System.out.println(state);   
38  if(state.equals(android.os.Environment.MEDIA_REMOVED ) || state .equals(android.os.Environment.MEDIA_UNMOUNTED)){   
39   System.out.println("SDCard 已卸载!");   
40  }   
41 }   
42} 

ListView优化方法之中的一个


写一个ViewHolder 内部类把须要反复用到的View放进去。ViewHolder Tag把标记这些View

content provider怎样发送信息

用一个Intent意图的PutExtra()方法把消息加进去。注冊一个BroadCastRecriver接收消息,更新Activity中的信息

安卓生命周期分哪几种

  1. 前台进程。这种进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在执行。这种程序重要性最高。仅仅有在系统内存很低,万不得已时才会被结束。


  2. 可见进程。

在屏幕上显示,可是不在前台的程序。比方一个前台进程以对话框的形式显示在该进程前面。

这种进程也非常重要,它们仅仅有在系统没有足够内存执行全部前台进程时,才会被结束。
  3. 服务进程。这种进程在后台持续执行,比方后台音乐播放、后台数据上传下载等。

这种进程对用户来说一般非常实用。所以仅仅有当系统没有足够内存来维持全部的前台和可见进程时。才会被结束。


  4. 后台进程。这种程序拥有一个用户不可见的 activity

这种程序在系统内存不足时。依照 LRU 的顺序被结束。


  5. 空进程。这种进程不包括不论什么活动的程序部件。系统可能随时关闭这类进程。

演示样例图:

技术分享

非常多基础知识都是我们日常开发用得到的。不要忽视了。事实上有时候它们起着非常关键的数据,比方ListView就是我们经常使用的















以上是关于安卓广播超时的原因分析及优化建议的主要内容,如果未能解决你的问题,请参考以下文章

HBase客户端访问超时原因及参数优化

安卓开机广播接收不到,是啥原因啊?

ANR及卡顿体验优化

ANR及卡顿体验优化

ANR及卡顿体验优化

XXL-JOB分布式任务调度框架-源码分析-任务调度执行流程及实现原理