0

こんにちは、非同期タスクを使用してスプラッシュ スクリーンに遅延を追加したかったのですが、どうすればよいかわかりません。これまでの私の DoInBackground コードは次のとおりです。

@Override
        protected Integer doInBackground(String... params) {

            Thread SplashThread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            int waited = 0;
                            while(running && (waited < delayTime)) {
                                sleep(100);
                                if(running) {
                                    waited += 100;
                                }
                            }
                        } catch(InterruptedException e) {
                            // do nothing
                        } finally {
                            finish();
                            stop();
                        }
                    }
                };
                SplashThread.start();

            return null;
        }

戻り値の null の部分が問題の主な原因だと思います。これは、SplashThread がまだバックグラウンドで実行されていても非同期タスクが終了し、薄い部分にリークが発生してエラーが発生するためです。私も counDownTimer を代用として使用しようとしましたが、これは同じ問題につながります。これを適切に行う方法はありますか?

4

1 に答える 1

2

doInBackgroundのメソッドで開始する追加のスレッドは必要ありませんAsyncTask。それAsyncTask自体がdoInBackground別のスレッドでメソッドを実行します。また、このwhileループのため、おそらく不要です。メソッドで実行したい作業を行ってからdoInBackground、単に戻ります。追加の遅延が必要な場合 (ただし、これは絶対に避ける必要があります) は、Thread.sleepメソッドを使用してスレッドを一時停止してから戻ることができます。

于 2012-08-24T07:09:10.537 に答える