我有一些经常与服务通信的课程。消息使用
发送private void sendMessage(int what)
{
Message msg = Message.obtain(null, what);
try
{
mServerMessenger.send(msg);
}
catch (RemoteException e)
{
}
}
我的问题是
我应该声明一个班级成员Message mMessage
,而不是在本地声明。
如果我要作为班级成员申报,我应该使用Message constructor
或使用Message.obtain
。
作为班级成员,如果使用,我需要在recycle
中致电onDestroy
Message.obtain
。
到目前为止,我没有遇到任何内存问题,但我希望尽可能高效地使用系统资源。
答案 0 :(得分:1)
这将是我的2c:
1)我应该声明一个类成员Message mMessage而不是 在当地宣布。
我想有一个类成员,以便JVM不必在每次方法调用时为局部变量创建条目。
2)如果声明为类成员,我应该使用Message构造函数或 使用Message.obtain。
始终使用obtain()
,因为它使用对象池..
3)作为班级成员,如果使用,我需要在
onDestroy
中调用回收 Message.obtain。
您无需仅nullify
class variable
致电回收。
您可以查看Message.java
来源以获取更多信息..
如果我发现更多信息,我也会仔细阅读并更新帖子。
EDIT1:
我再次要求您检查源代码..如果要将对象返回到recycle()
,则应调用global object pool
方法。调用后不应使用该对象回收方法..复制方法(ICS)以便快速参考:
/**
* Return a Message instance to the global pool. You MUST NOT touch
* the Message after calling this function -- it has effectively been
* freed.
*/
public void recycle() {
clearForRecycle();
synchronized (sPoolSync) {
if (sPoolSize < MAX_POOL_SIZE) {
next = sPool;
sPool = this;
sPoolSize++;
}
}
}
只要您不调用'recyle()',您就可以使用该实例。因此,如果最好在调用代码中的recycle()
方法之前调用obtain()
,并且在onDestroy()
调用recycle()
和nullify
对象..