在android中,布局在异步任务期间被挂起

在android中,布局在异步任务期间被挂起,android,android-asynctask,splash-screen,Android,Android Asynctask,Splash Screen,我是android开发新手。 我正在尝试加载一些网络数据,我想异步加载这些数据,以便启动屏幕显示,直到网络操作完成。现在,当我运行belo时,启动屏幕不会显示,而是显示一个标题栏处于挂起状态的空白屏幕 我也在清单文件中将此活动标记为启动器。你能告诉我去那里的正确方法吗 这是我的闪屏代码 public class SplashScreen extends Activity { /** Called when the activity is first created. */ @Override

我是android开发新手。 我正在尝试加载一些网络数据,我想异步加载这些数据,以便启动屏幕显示,直到网络操作完成。现在,当我运行belo时,启动屏幕不会显示,而是显示一个标题栏处于挂起状态的空白屏幕

我也在清单文件中将此活动标记为启动器。你能告诉我去那里的正确方法吗

这是我的闪屏代码

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;
}


}
公共类SplashScreen扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
试一试{
AsyncTask async=新的URLReader(splashScreen).execute();
hdetails=async.get();
splashScreen.saveImage(当前日期);
}
catch(InterruptedException e){}catch(ExecutionException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
最后{
System.out.println(“最终输入”);
完成();
//开始一项新的活动
意图i=新意图();
i、 putExtra(“hdetails”,新HukumNamaDetails(hdetails.getHukumnama_punjabi)()
,hdetails.getPunjabi_vyakhya(),hdetails.getEnglish_translation());
i、 setClass(splashScreen,Daily_HukumNama.class);
星触觉(i);
}
}
//处理触摸的功能
@凌驾
公共布尔onTouchEvent(运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
同步(飞溅踏板){
splashTread.notifyAll();
}
}
返回true;
}
}
谢谢 Amandeep

调用
get()
函数将导致UI线程等待计算完成。不要调用
get()
方法。而是在
AsyncTask
onPostExecute()
方法中执行所有后处理


不要调用
get()
。重写AsyncTask中的
onPostExecute()
,以处理该操作导致的任何UI更新。调用
get()
将导致UI线程阻塞。

使用AsyncTask可能有点冒险:

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

2.在异步任务的doInBackground()中完成您的工作不要在这里尝试任何UI内容

3.*删除AsyncTask的onPostExecute()中的启动屏幕,因为届时您的后台工作将完成

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

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

因为您正在调用,这会使UI线程等待
doInBackground
执行未完成