android系列

作者: MrWang915 | 来源:发表于2017-02-23 17:15 被阅读84次

    Android基础

    GC原理时机以及GC对象;

    可以通过一些技巧和方式让GC运行更加合理、高效

    当程序员创建对象时,GC就开始监控这个对象地址、大小以及使用情况。通常GC采用有向图的方式记录并管理堆中的所有对象,通过这种方式确定哪些对象是“可达”的,哪些对象是“不可达”的。当GC确定一些对象为“不可达时”GC就有责任回收这些内存空间

    四大组件及生命周期;ContentProvider的权限管理(读写分离,权限控制-精确到表级,URL控制);Activity的四种启动模式对比;Activity状态保存于恢复

    Fragment生命周期;Fragment状态保存

    startActivityForResult是哪个类的方法,在什么情况下使用,如果在Adapter中使用应该如何解耦

    AsyncTask原理及不足;

    1.AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC的风险

    2.AsyncTask一旦执行了doInBackground,就算调用取消方法,也会将doInBackground里面的代码执行完毕,才会停止。

    3.线程池不经维护,当大量异步发生时,导致线程池满了,会出异常。

    IntentService原理

    IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们去手动控制。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。

    AstncTask+HttpClient与AsyncHttpClient有什么区别

    如何保证一个后台服务不被杀死;比较省电的方式是什么

    1.把service写成系统服务,将不会被回收(未实践):

    在Manifest.xml文件中设置persistent属性为true,则可使该服务免受out-of-memory killer的影响。但是这种做法一定要谨慎,系统服务太多将严重影响系统的整体运行效率。

    2.提高service的优先级(未实践):

    设置android:priority="1000"

    Xml代码  收藏代码

    3.将服务写成前台服务foreground service(已实践,很大程度上能解决问题,但不能保证一定不会被杀):

    重写onStartCommand方法,使用StartForeground(int,Notification)方法来启动service。

    注:前台服务会在状态栏显示一个通知,最典型的应用就是音乐播放器,只要在播放状态下,就算休眠也不会被杀,如果不想显示通知,只要把参数里的int设为0即可。

    Java代码  收藏代码

    Notification notification = new Notification(R.drawable.logo,

    "wf update service is running",

    System.currentTimeMillis());

    pintent=PendingIntent.getService(this, 0, intent, 0);

    notification.setLatestEventInfo(this, "WF Update Service",

    "wf update service is running!", pintent);

    //让该service前台运行,避免手机休眠时系统自动杀掉该服务

    //如果 id 为 0 ,那么状态栏的 notification 将不会显示。

    startForeground(startId, notification);

    同时,对于通过startForeground启动的service,onDestory方法中需要通过stopForeground(true)来取消前台运行状态。

    ps:如果service被杀后下次重启出错,可能是此时重发的Intent为null的缘故,可以通过修改onStartCommand方法的返回值来解决:

    START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

    START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

    START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

    START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

    Java代码  收藏代码

    //if this service's process is killed, then it will be scheduled for a restart and the last delivered Intent re-delivered to it again

    return Service.START_REDELIVER_INTENT;

    4.利用ANDROID的系统广播检查Service的运行状态,如果被杀掉,就再起来(未实践):

    利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。

    具体的实现,可以参考这个链接:http://mobile.51cto.com/abased-374969.htm

    补充:以上是解决service容易被回收的方法,但是再进一步深究,为什么service会被系统杀掉呢?通过分析手机的logcat日志发现这么一段话:

    引用

    06-19 08:01:32.755 W/ActivityManager( 2081): Killing ProcessRecord{43a96570 6437:com.example.helloandroid/u0a187}: background ANR

    06-19 08:01:32.910 I/ActivityManager( 2081): Process com.example.helloandroid (pid 6437) (adj 0) has died.

    看来这个ANR(Application Not Responding)是关键。上网查到的解释是:

    在如下情况下,Android会报出ANR错误:

    – 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件

    – BroadcastReceiver 没有在10秒内完成返回

    如何通过广播拦截和abort一条短信;

    广播是否可以请求网络;

    不可以

    广播引起anr的时间限制

    10 s

    进程间通信,AIDL

    Handler机制及底层实现

    Binder机制及底层实现

    ApplicationContext和ActivityContext的区别

    一张Bitmap所占内存以及内存占用的计算

    对于应用更新这块是如何做的?(灰度,强制更新,分区域更新)

    混合开发,RN,weex,H5,小程序(做Android的了解一些前端js等还是很有好处的)

    说一款你认为当前比较火的应用并设计(直播APP)

    常见编码方式;utf-8编码中的中文占几个字节;int型几个字节

    实现一个Json解析器(可以通过正则提高速度)

    MVC MVP MVVM; 常见的设计模式;写出观察者模式的代码

    TCP的3次握手和四次挥手;TCP与UDP的区别

    HTTP协议;HTTP1.0与2.0的区别;HTTP报文结构

    HTTP与HTTPS的区别以及如何实现安全性

    原地址:

    http://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247484286&idx=1&sn=e5843fb79d8a36ab063699b5fb9a0711&chksm=eae1f62cdd967f3a576396f8402581326b835b8327ed5f20f23896fcd22c2115e77863b4115b#rd

    相关文章

      网友评论

        本文标题:android系列

        本文链接:https://www.haomeiwen.com/subject/obsbwttx.html