以下消息处理程序可以正常接收来自我的服务的消息...
private Handler handler = new Handler()
{
public void handleMessage(Message message)
{
Object path = message.obj;
if (message.arg1 == 5 && path != null) //5 means its a single mapleg to plot on the map
{
String myString = (String) message.obj;
Gson gson = new Gson();
MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
myMapView.getOverlays().add(new DirectionPathOverlay(mapleg.fromPoint, mapleg.toPoint));
mc.animateTo(mapleg.toPoint);
}
else
{
if (message.arg1 == RESULT_OK && path != null)
{
Toast.makeText(PSActivity.this, "Service Started" + path.toString(), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(PSActivity.this,"Service error" + String.valueOf(message.arg1), Toast.LENGTH_LONG).show();
}
}
};
};
然而,即使它在 AVD 中测试正常(我通过 DDMS 向它提供了一个大的 KML 文件)“对象路径 = message.obj;” 行有一个警告说“这个处理程序类应该是静态的,否则可能会发生泄漏”。
但是如果我说“static Handler handler = new Handler()”,它不会编译并抱怨我“不能对非静态字段 myMapView 进行静态引用。如果我不能进行这样的引用,我就做不到任何有用的东西。
这让我在这个问题上花了几个小时在谷歌上搜索,并且比我想知道的更多地了解弱引用。我发现经常发现的建议是我应该更换......
private Handler handler = new Handler()
和
static class handler extends Handler
{
private final WeakReference<PSActivity> mTarget;
handler(PSActivity target)
{
mTarget = new WeakReference<PSActivity>(target);
}
但这不会编译仍然抱怨我无法对非 dtatic 字段进行静态引用。所以,我一周或之前的问题是“我怎样才能为 android 编写一个消息处理程序,以便我的服务可以将数据发送到我的活动。即使我有工作代码,问题仍然与后缀“不泄漏内存”有关。谢谢,加里