2015-09-24 59 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