4

私は 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();

スレッドから呼び出そうとしたときに、アクティビティ パラメータを正しく渡すことができません。

これは 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;
    }
}

どうすればこれをソールにできますか。ありがとう

4

4 に答える 4

3

このようなスレッド内で AsyncTask を実行する理由はありません。UI スレッドでこれを呼び出すことができます。AsyncTask がスレッド化を管理します。

doInBackground メソッドに入力したコードはバックグラウンド スレッドで自動的に実行され、AsyncTask の他のメソッドは UI スレッドで実行されるため、UI と安全に直接やり取りできます。

于 2012-10-03T09:33:29.477 に答える
2

コンテキストが MainActivity からスレッド クラスに変更されるため、これをスレッド内から直接使用することはできません。したがって、次のことを行う必要があります。

CommonAysnk   mobjCommonAysnk = new CommonAysnk(ActivityName.this, 1); 

また、スレッド内から AsyncTask を実行することもできますが、それに関して厳格なルールはありません。

于 2012-10-03T09:36:23.377 に答える
1

使用する

 CommonAysnk mobjCommonAysnk = new CommonAysnk(ClassName.this, 1);
 mobjCommonAysnk.execute();
于 2012-10-03T09:31:30.337 に答える