如何将Context传递给AsyncTask?

Dar*_*iya 18 java android

如何Async Task在不同的java文件中编写的类中传递上下文Main Activity但是从主活动调用?

以下是我的代码:

 @Override

protected void onPostExecute(List<Movie_ModelClass> result) {
        super.onPostExecute(result);

        if (result != null) {
            Movie_Adapter movieAdapter = new Movie_Adapter(new MainActivity().getApplicationContext() , R.layout.custom_row, result);
            MainActivity ovj_main = new MainActivity();
            ovj_main.lv_main.setAdapter(movieAdapter);
        } else {
            Toast.makeText(new MainActivity().getApplicationContext() ,"No Data Found", Toast.LENGTH_LONG);

        }
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
    }
Run Code Online (Sandbox Code Playgroud)

ear*_*jim 71

您可以将Context实例作为构造函数参数传递(并保留一个实例WeakReference以避免内存泄漏).

例如:

public class ExampleAsyncTask extends AsyncTask {
    private WeakReference<Context> contextRef;

    public ExampleAsyncTask(Context context) {
        contextRef = new WeakReference<>(context);
    }

    @Override
    protected Object doInBackground(Object[] params) {
        // ...
    }

    @Override
    protected void onPostExecute(Object result) {
        Context context = contextRef.get();
        if (context != null) {
            // do whatever you'd like with context
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并执行:

new ExampleAsyncTask(aContextInstance).execute();
Run Code Online (Sandbox Code Playgroud)


Tri*_*tan 1

您只需在 AsyncTask 的构造函数中传递上下文即可。

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Void, Integer, List> {

    private final Context mContext;

    public MyAsyncTask(final Context context) {
         mContext = context;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后只需在 onPostExecute() 方法中使用 mContext 变量。

当您从 MainActivity 调用 AsyncTask 时,您将上下文传递给 MyAsyncTask 的构造函数。

MainActivity.java

final MyAsyncTask task = new MyAsyncTask(getApplicationContext());
task.execute();
Run Code Online (Sandbox Code Playgroud)

  • `AsyncTask` 不应该保留对活动上下文的强引用。关于这一点有很多问答。[这是一个](http://stackoverflow.com/questions/19531168/android-context-weak-reference)。 (14认同)