0

我是android开发的新手。我正在尝试加载一些我想异步执行的网络数据,以便在网络操作完成之前显示启动画面。现在,当我运行 belo 时,启动画面不会显示,而是显示一个带有标题栏的空白屏幕上吊状态。

我也在清单文件中将此活动标记为 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

调用该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 回答
0

使用 AsyncTask 可能有点冒险:

1.使用AsyncTask的onPreExecute()启动屏。

2.在 AsyncTask 的doInBackground()中做你的工作不要在这里尝试任何UI 的东西

3. *删除* AsyncTask 的onPostExecute()中的启动画面,因为届时您的背景内容将完成。

要启动 AsyncTask,只需使用 AsyncTask 对象的引用调用 execute()。

注意:从我的角度来看,此时调用get()是不必要的。

于 2013-02-19T05:24:19.800 回答