2016-07-27 56 views
1

如果我有一個AsyncTask作爲一個單獨的類,並且我從一個Activity運行AsyncTask,那麼AsyncTask會持有對Activity的引用,就像它是後者的內部類一樣? 還是它解決了內存泄漏的問題?AsyncTask作爲一個單獨的類

此外,將包裹在WeakReference中的上下文傳遞給AsyncTask會做出什麼改變?

+0

的refrense是的,它會通過傳遞活動,類似於內部類的'context'保持參照活動。 – Arshak

+0

以及你傳遞的包裹在WeakReference中的上下文是什麼? – BVtp

+0

爲了避免內存泄漏,請在WeakReference中包裝上下文。 –

回答

0

你可以使用這樣並獲得活動

public class DeleteUserTask extends AsyncTask<String, String, String> { 
    private Context context; 
    private JSONObject Object, Object1; 
    public static String Success, Exception; 
    public static boolean isClick; 

    public DeleteUserTask(Context ctx) { 
     context = ctx; 
    } 

    @Override 
    protected void onPreExecute() { 
     OrganizationUser_EditProfileScreen.pb.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      ActivityBase.result = null; 
      Log.e("", "Request-->" + writeJSON().toString()); 
      ActivityBase.PostMethod(context, 
        WebServiceLinks.UserStatusButtonTask, writeJSON()); 
      Object = new JSONObject(ActivityBase.result); 
      Object1 = Object 
        .getJSONObject("OrganizationUserProfileButtonUpdateResult"); 
      Success = Object1.getString("Success"); 
      Exception = Object1.getString("Exception"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     try { 
      OrganizationUser_EditProfileScreen.pb.setVisibility(View.GONE); 
      if (ActivityBase.result != null && Success == "true") { 
       ActivityBase 
         .GeneralDialog(R.string.account, Exception, context); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public JSONObject writeJSON() { 
     JSONObject object = new JSONObject(); 
     try { 

      object.put("OrgID", OrganizationLoginTask.OrgID); 
      object.put("OrgUserID", Search_Screen.OrgUserID); 
      object.put("Status", OrganizationUser_EditProfileScreen.Status); 
      object.put("ModifiedByTypeCode", "2"); 

      object.put("ModifiedSourceCode", "8"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return object; 
    } 
} 
+0

我很抱歉,但又是如何解決內存泄漏問題? – BVtp

相關問題