0

私はアンドロイド開発が初めてです。ネットワーク操作が完了するまでスプラッシュ画面が表示されるように、非同期で実行したいネットワーク データを読み込もうとしています。吊るした状態。

マニフェスト ファイルでも、このアクティビティを LAUNCHER としてマークしました。正しい方法を教えてください。

これがスプラッシュスクリーンのコードです。

public class SplashScreen extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

            try{

                        AsyncTask<Void, Void, HukumNamaDetails> async=new URLReader(splashScreen).execute();
                        hdetails=async.get();

                        splashScreen.saveImage(currdate);


                    }

         catch(InterruptedException e) {} catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally {
                System.out.println("In finally");
                finish();

                //start a new activity
                Intent i = new Intent();
                i.putExtra("hdetails", new HukumNamaDetails(hdetails.getHukumnama_punjabi()
                    ,hdetails.getPunjabi_vyakhya(),hdetails.getEnglish_translation()));
                i.setClass(splashScreen, Daily_HukumNama.class);
                startActivity(i);
            }
        }

//Function that will handle the touch
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        synchronized(splashTread){
                splashTread.notifyAll();
        }
    }
    return true;
}


}

ありがとうございます

4

3 に答える 3

0

AsyncTask を使用するのは少し危険な場合があります。

1. AsyncTask のonPreExecute()を使用して、スプラッシュスクリーンを起動します。

2. AsyncTask のdoInBackground()で作業を行います。ここでUI を試さないでください。

3. *削除* AsyncTask のonPostExecute()でスプラッシュスクリーンを削除します。それまでにバックグラウンド処理が完了します。

AsyncTask を開始するには、AsyncTask オブジェクトの参照を使用して execute() を呼び出すだけです。

注 :この時点でget()を呼び出すことは、私の観点からは不要です。

于 2013-02-19T05:24:19.800 に答える
0

関数を呼び出すget()と、UI スレッドは計算が完了するまで待機します。get()メソッドを呼び出さないでください。onPostExecute()代わりに、 のメソッドですべての後処理を行いますAsyncTask

于 2013-02-19T04:52:22.787 に答える
0

https://developer.android.com/reference/android/os/AsyncTask.html

電話しないでくださいget()。AsyncTask でオーバーライドonPostExecute()して、操作に起因する UI の更新を処理します。を呼び出すget()と、UI スレッドがブロックされます。

于 2013-02-19T04:52:38.460 に答える