2015-09-24 61 views
1

在我的android应用程序中,我向联系人发送消息..它显示“此处理程序类应该是静态的,否则可能会泄漏”。我的应用程序崩溃的手机,但它工作在模拟器,我给下面的代码请通过它,如果有人能帮助任何错误,请帮助..Android处理程序泄漏

progresshandler = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       //progressDialog.dismiss(); 
       //Toast.makeText(SendMessagesActivity.this, "Messages Sent",Toast.LENGTH_LONG).show(); 
       new ProgressTask().execute(); 

      } 
     }; 

回答

1

为了避免泄漏处理程序创建自定义类,扩展Handler类如下:

// 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) { 
//    } 
      } 
     } 
    } 

创建这个类的对象,无论你想使用如下。

 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(); 
     } 

编辑:

  1. 声明这个任务在你的活动:

    私人ProgressTask progressTask;

  2. 在的onCreate()

    progressTask =新ProgressTask创建它的实例();在IncomingHandler

  3. 更改行:

    yourActivity.progressTask.execute();

由于

+0

如果(editMessage.getText()的toString()长度()> 0。) { SendMessagesThread螺纹=新SendMessagesThread(progresshandler); thread.start(); // progressDialog.show(); } – Jocheved

+0

其实从这里我打电话进步处理器 – Jocheved

+0

所以u能请帮助我如何需要修改代码 – Jocheved