Android 处理程序泄漏
Android Handler leaking
在我的 android 应用程序中,我正在向联系人发送消息。它显示“此处理程序 class 应该是静态的,否则可能会泄漏”。我的应用程序在 Mobile phone 中崩溃,但它在 Emulator 中工作,我正在提供下面的代码,请检查它,如果有人可以帮助,请帮助任何错误..
progresshandler = new Handler()
{
public void handleMessage(Message msg)
{
//progressDialog.dismiss();
//Toast.makeText(SendMessagesActivity.this, "Messages Sent",Toast.LENGTH_LONG).show();
new ProgressTask().execute();
}
};
为避免泄漏处理程序创建自定义 class 扩展处理程序 class 如下:
// Handler of incoming messages from clients.
private static class IncomingHandler extends Handler {
private WeakReference<YourActivity> yourActivityWeakReference;
public IncomingHandler(YourActivity yourActivity) {
yourActivityWeakReference = new WeakReference<>(yourActivity);
}
@Override
public void handleMessage(Message message) {
if (yourActivityWeakReference != null) {
YourActivity yourActivity = yourActivityWeakReference.get();
Edited : new ProgressTask().execute();
// switch (message.what) {
// }
}
}
}
创建此 class 的对象,如下所示。
private IncomingHandler mPulseHandler;
mPulseHandler = new IncomingHandler(HomeActivity.this);
mPulseHandler.sendEmptyMessage(0);
已编辑:
IncomingHandler progresshandler = new IncomingHandler(YourActivity.this);
if (editMessage.getText().toString().length() > 0) {
SendMessagesThread thread = new SendMessagesThread(progresshandler);
thread.start();
// progressDialog.show();
}
已编辑:
在您的 activity 中声明此任务:
私有 ProgressTask progressTask;
在 onCreate() 中创建它的实例
progressTask=new ProgressTask();
更改 IncomingHandler 中的行:
yourActivity.progressTask.execute();
谢谢
在我的 android 应用程序中,我正在向联系人发送消息。它显示“此处理程序 class 应该是静态的,否则可能会泄漏”。我的应用程序在 Mobile phone 中崩溃,但它在 Emulator 中工作,我正在提供下面的代码,请检查它,如果有人可以帮助,请帮助任何错误..
progresshandler = new Handler()
{
public void handleMessage(Message msg)
{
//progressDialog.dismiss();
//Toast.makeText(SendMessagesActivity.this, "Messages Sent",Toast.LENGTH_LONG).show();
new ProgressTask().execute();
}
};
为避免泄漏处理程序创建自定义 class 扩展处理程序 class 如下:
// Handler of incoming messages from clients.
private static class IncomingHandler extends Handler {
private WeakReference<YourActivity> yourActivityWeakReference;
public IncomingHandler(YourActivity yourActivity) {
yourActivityWeakReference = new WeakReference<>(yourActivity);
}
@Override
public void handleMessage(Message message) {
if (yourActivityWeakReference != null) {
YourActivity yourActivity = yourActivityWeakReference.get();
Edited : new ProgressTask().execute();
// switch (message.what) {
// }
}
}
}
创建此 class 的对象,如下所示。
private IncomingHandler mPulseHandler;
mPulseHandler = new IncomingHandler(HomeActivity.this);
mPulseHandler.sendEmptyMessage(0);
已编辑:
IncomingHandler progresshandler = new IncomingHandler(YourActivity.this);
if (editMessage.getText().toString().length() > 0) {
SendMessagesThread thread = new SendMessagesThread(progresshandler);
thread.start();
// progressDialog.show();
}
已编辑:
在您的 activity 中声明此任务:
私有 ProgressTask progressTask;
在 onCreate() 中创建它的实例
progressTask=new ProgressTask();
更改 IncomingHandler 中的行:
yourActivity.progressTask.execute();
谢谢