- 博客(14)
- 资源 (6)
- 收藏
- 关注
原创 Android内存管理机制之LowMemoryKiller
Android Kernel会定时执行一次检查,杀死一些进程以释放内存。那么如何判断哪些进程需要杀死呢?答案就是LowMemoryKiller机制。LowMemoryKiller定时进行检查,主要是通过进程的oom_adj值来判定进程的重要性。这个值越小程序越重要,被杀死的可能性越低。Android将应用的重要性分为以下几类: 名称
2016-06-28 10:14:55 1798
原创 Android之AlarmManager定时器
AlarmManager实质上是一个全局定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其他组件(Activity、Service、BroadcastReceiver)。常用方法:void set(int type, long triggerAtMillis, PendingIntent operation)设置在triggerAtMillis时间启动由o
2016-06-24 16:21:59 1916
原创 Android动态加载技术之三个基础性问题
动态加载技术(也称为插件化技术),可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。动态加载必须解决的三个基础性问题:资源访问、Activity生命周期的管理和ClassLoader的管理。1.资源访问宿主应用调用未安装的插件apk,一个很大的问题就是资源访问,具体来说就是插件中凡是以R开头的资源都不能访问了,这是因为宿主应用中没有插件的资源。
2016-06-23 14:27:19 224
原创 crash log上传之UncaughtExceptionHandler
当应用发生crash时,系统会调用UncaughtExceptionHandler的uncaughtException方法,在该方法中可以捕获异常信息,可以选择把异常信息存储到SD卡中,然后在合适的时机(可以使用JobScheduler)通过网络将crash文件上传到服务器。调用Thread的setDefaultUncaughtExceptionHandler方法将它设置为线程默认的异常处理器
2016-06-22 16:38:16 369
原创 Android进程间通信之Socket
Socket也称为“套接字”,是网络通信中的概念,它分为流式套接字和用户数据报套接字两种,分别对应于网络传输控制层中的TCP和UDP协议。TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立需要经过“三次握手”才能完成,为了提供稳定的数据传输功能,其本身提供了超时重传机制,因此具有很高的稳定性。而UDP是无连接的,提供不稳定的单向通信功能,当然UDP也可以实现双向通信功能。
2016-06-17 16:18:35 1564
原创 远程服务例子3
本例子将会介绍远程服务回调接口的用法以及注销回调接口的方法、权限校验、远程服务挂掉后重连的方法等。直接上代码,远程服务aidl接口及服务代码:package com.example.aidl4.aidl;import java.util.List;import com.example.aidl4.aidl.PersionParcel;interface IAddPers
2016-06-17 09:49:02 459
原创 IPC基础概念Serializable、Parcelable、Binder
Serializable和Parcelable接口可以完成对象的序列化过程,通过Intent和Binder传输数据时就需要使用它们。有时需要把对象持久化到存储设备上或者通过网络传输给其他客户端,此时也可以使用它们。1.Serializable接口Serializable是Java提供的一个序列化接口,为对象提供标准的序列化和反序列化操作。想让一个对象实现序列化,只需要这个类实现Seri
2016-06-16 19:50:12 810
原创 Android进程间通信之Messenger
关于Messenger的官方描述是:允许实现基于消息的进程间通信的方式。可以看到,1.客户端发送一个msg给服务端2.服务端的handler将接收到的msg处理3.将处理结果封装成msg发送给客户端4.客户端的handler处理接收到msgMessenger的源码实现是基于AIDL的。例子:一个apk是服务端,接收客户端发来的消息,求和后发送给客户端;一个apk是客
2016-06-14 15:59:25 363
原创 加载图片工具类
使用HandlerThread实现的加载,HandlerThread中定义了线程、调用了Looper.prepare()和Looper.loop()方法。与Handler绑定后,loop()方法循环从MessageQueue中取Handler发送来的消息进行图片加载。直接上代码:/** * 加载图片核心类,可以拷贝直接用 * @Description: TODO * @auth
2016-06-13 14:09:20 451 1
原创 Java多线程
1.CountDownLatch递减计数器锁,一个同步辅助类,可以用来确保某些活动直到其他活动都完成后才继续执行。它包含一个递减计数器,该计数器初始值是一个正数,表示需要等待事件的数量。await()方法等待计数器到达0表示所需等待的事件都已完成。例子:线程2等线程1执行完才能开始执行CountDownLatch mLatch = new CountDownLatch(1);
2016-06-10 16:06:42 366
原创 Looper、Message、MessageQueue、Handler异步消息处理机制源码分析
1.LooperLooper主要是prepare()和loop()两个方法。prepare()方法主要是创建Looper和MessageQueue对象,并把Looper对象和线程绑定。loop()方法主要是从线程绑定的Looper对象中获取MessageQueue消息队列,在死循环中从MessageQueue中循环取消息交给target对象处理。public static fina
2016-06-08 18:27:20 564
原创 IntentService源码分析以及HandlerThread的用法
直接上源码:public abstract class IntentService extends Service { private volatile Looper mServiceLooper; private volatile ServiceHandler mServiceHandler; private String mName; private
2016-06-08 13:46:41 378
原创 动态加载so库文件
使用动态加载so库文件可以减小apk文件的大小,如:so库文件较大时,使用动态加载,在需要使用so库文件或者满足其他条件时,提示用户下载或自动下载,这样apk文件的大小就可以大大降低。Android加载so库文件的机制:加载so库文件基本都用的System类的loadLibrary方法,其实System类中还有一个load方法。/** * See {@link Runtim
2016-06-07 15:35:36 2383
原创 Android动态加载机制
Dalvik虚拟机类加载机制DexClassLoader和PathClassLoader这两个类都继承自ClassLoader的类加载器,本质上是重载了ClassLoader的findClass方法。它们在加载一个类之前,会去检查自己以及自己以上的类加载器是否已经加载过这个类,如果已经加载过,就会直接将之返回,而不会重复加载。DexClassLoader和PathClassLoader
2016-06-06 20:18:12 945
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人