次のメッセージ ハンドラーは、サービスからメッセージを正常に受信します...
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 ファイルをフィードしている) で問題なくテストできますが、「object path = message.obj;」行には、「この Handler クラスは静的である必要があります。そうしないと、リークが発生する可能性があります」という警告があります。
しかし、「static Handler handler = new 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);
}
しかし、これはまだコンパイルされず、非 dtatic フィールドへの静的参照を作成できないと不平を言っています。そのため、1週間前または1週間前の私の質問は、「サービスがアクティビティにデータを送信できるように、Android用のメッセージハンドラーを作成するにはどうすればよいですか?ありがとう、ゲイリー