Обработчик следующего сообщения отлично работает, получая сообщения от моей службы...
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 (я передаю ему большой файл KML через DDMS), «путь к объекту = message.obj;» В строке есть ПРЕДУПРЕЖДЕНИЕ о том, что «этот класс Handler должен быть статическим, иначе могут возникнуть утечки».
Но если я скажу «статический обработчик обработчика = новый обработчик ()», он не будет компилироваться, жалуясь, что я «не могу сделать статическую ссылку на нестатическое поле myMapView. Если я не могу сделать такие ссылки, я не могу сделать ничего полезного.
Это привело к тому, что я потратил несколько часов на гугление по этой проблеме и узнал о weakReferences больше, чем я когда-либо хотел знать. Часто встречающаяся рекомендация, которую я нахожу, заключается в том, что я должен заменить ...
private Handler handler = new Handler()
с участием
static class handler extends Handler
{
private final WeakReference<PSActivity> mTarget;
handler(PSActivity target)
{
mTarget = new WeakReference<PSActivity>(target);
}
Но это не будет компилироваться, все еще жалуясь, что я не могу сделать статическую ссылку на нестатическое поле. Итак, мой вопрос неделю назад был: «Как я могу написать обработчик сообщений для Android, чтобы моя служба могла отправлять данные в мою деятельность. Несмотря на то, что у меня есть рабочий код, вопрос остается с суффиксом «без утечки памяти». Спасибо, Гэри