如果需要多次或多个地方,需要使用到同一个对象,那么可以考虑建立专门的对象池,一方面可以减少创建对象的时间,另一方面可以有效减少 GC 。
比如 Socket 与服务器交互,经常一条消息就封装为一个对象,如果消息用完就任由系统把对象回收,就很可惜了,而且消息一多,就会引起较多 GC ,这里就可以考虑弄个消息对象池。
最经典的例子是数据库连接池。
Handler 的 message 对像也是如此:
运行或调试程序时,自动点亮并解锁屏幕,这个很实用吧!
/**
* 自动开启并解锁屏幕
*/
private void wakeLock() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
final PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");
wakeLock.acquire();
//键盘锁管理器对象
KeyguardManager km= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
//这里参数”unLock”作为调试时LogCat中的Tag
KeyguardLock kl = km.newKeyguardLock("unLock");
kl.disableKeyguard(); //解锁
CLog.show("wakeLock");
CThreadUtils.runInBackground(new Runnable() {
@Override
public void run() {
wakeLock.release();
}
}, 5000);
}