gpt4 book ai didi

android - 消息处理程序和 WeakReference 问题

转载 作者:行者123 更新时间:2023-11-29 15:26:02 25 4
gpt4 key购买 nike

以下消息处理程序可以正常接收来 self 的服务的消息...

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;”行有一个警告说“这个处理程序类应该是静态的,否则可能会发生泄漏”。

但是如果我说“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);
}

但这不会编译仍然提示我不能对非数据字段进行静态引用。所以,一周前我的问题是“我如何为 android 编写消息处理程序,以便我的服务可以将数据发送到我的 Activity 。即使我有工作代码,问题仍然存在后缀“不泄漏内存”。谢谢,加里

最佳答案

当我尝试在服务中使用处理程序时,我收到了相同的警告消息,并最终通过采纳 this thread 的建议解决了它。 ,查看我的项目中的代码 fragment 。

public class MyService extends Service {
...
private MyHandler mHandler;

public static class MyHandler extends Handler {
private final WeakReference<MyService> mService;

MyHandler(MyService service) {
mService = new WeakReference<MyService>(service);
}

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MyService service = mService.get();
if (service!=null) {
if (msg.what==MSG_RESUME_CHECKING) {
service.pause();
} else if (msg.what==MSG_PAUSE_CHECKING) {
service.resume();
}
}
}
}
...

@Override
public void onCreate() {
super.onCreate();
...
mHandler = new MyHandler(this);
...
}
}

关于android - 消息处理程序和 WeakReference 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com