我在Android应用程序中工作,我想从我的UI主线程中调用AsyncTask。为此我想从一个线程调用我的AsyncTask。
这是我从主UI线程调用的方法。这工作正常
CommonAysnk mobjCommonAysnk = new CommonAysnk(this, 1);
mobjCommonAysnk.execute();
CommonAysnk是我的AsyncTask类。我想将我的活动和一个整数参数传递给AsyncTask构造函数。我如何从一个线程中调用它,如下所示。
Thread t = new Thread() {
public void run() {
try {
CommonAysnk mobjCommonAysnk = new CommonAysnk(this, 1);
mobjCommonAysnk.execute();
} catch (Exception ex) {
}}};
t.start();
当我尝试从线程调用它时,我无法正确传递activity参数。
这是CommonAysnk类。请仔细研究
public class CommonAysnk extends AsyncTask<URL, Integer, String> {
private Common mobjCommon = null;
private Activity mobjActivity = null;
private int mcallIntentcond = 0;
private ProgressDialog mProcessDialog = null;
public CommonAysnk(Activity activity, int condition) {
mobjActivity = activity;
mcallIntentcond = condition;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mProcessDialog.dismiss();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mobjCommon = new Common();
mProcessDialog = mobjCommon.showProgressDialog(mobjActivity, "",
"Loading...", false);
}
@Override
protected String doInBackground(URL... params) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
switch (mcallIntentcond) {
case 1:
Intent i=new Intent(mobjActivity, Home.class);
mobjActivity.startActivity(i);
mobjActivity.finish();
break;
}
return null;
}
}
我们如何才能做到这一点。感谢
答案 0 :(得分:3)
没有理由在这样的线程中运行AsyncTask,你可以在UI线程上调用它。 AsyncTask为您管理线程。
您在doInBackground方法中输入的代码会自动在后台线程中运行,AsyncTask上的其他方法在UI线程上运行,您可以直接与UI进行交互。
答案 1 :(得分:2)
当上下文从MainActivity更改为线程类时,您无法直接在线程内使用 this 。所以你需要做以下事情,
CommonAysnk mobjCommonAysnk = new CommonAysnk(ActivityName.this, 1);
你可以从一个线程中运行AsyncTask,没有关于那个的硬性规则。
答案 2 :(得分:1)
使用
CommonAysnk mobjCommonAysnk = new CommonAysnk(ClassName.this, 1);
mobjCommonAysnk.execute();
答案 3 :(得分:1)
必须仅从主线程调用window
,
否则,当我们尝试从asynctask
或onPreExecute
或onProgressUpdate
函数触摸UI时,它可能会在运行时崩溃。