活动不会足够快地加载内容

时间:2012-05-24 14:14:39

标签: android android-activity

我正试图为我的Android应用程序制作启动画面,其中登录页面只是启动Splash活动,然后所有登录处理工作都在那里完成。然后,无论登录是否成功,它都会返回一个布尔值。但是,在加载XML布局内容之前,登录处理已完成。如何解决这个问题?

这是我的启动画面活动:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    Bundle extras = getIntent().getExtras();
    if(extras !=null)
    {
        url = extras.getString("url");
    }

    setContentView(R.layout.splashscreen);
    url += "login/?userName=" + Login.loginName + "&password=" + Login.password;

    DomLoginParser parser = new DomLoginParser(url);
    if(parser.parse())
    {
        Login.loginSuccessful = true;
    }
    else
    {
        Login.loginSuccessful = false;
    }

    finish();
}

3 个答案:

答案 0 :(得分:3)

使用AsyncTask执行登录,将登录名移出onCreate调用。 你正在做的是在给它机会展示内容之前完成活动。 仅在onCreate调用完成后,该活动才显示contentView ...

答案 1 :(得分:0)

不知道DomLoginParser做了什么,并认为Login类是静态的,但为什么要在onCreate()中调用finish()方法?

这就是问题,你立即杀死了活动!

删除finish()调用。

如果

DomLoginParser parser = new DomLoginParser(url);
if(parser.parse())
{
    Login.loginSuccessful = true;
}
else
{
    Login.loginSuccessful = false;
}

这就是你所做的关于登录的所有事情,并希望将启动画面显示一段时间,调用Thread.sleep()(但要注意,如果睡眠时间太长,它可能会产生应用程序无响应),或者只需创建一个单独的进程(Asynctask或与另一个线程相关联的threadhandler,说明你的启动画面完成)。

答案 2 :(得分:0)

尝试这样的事情:

private class LoginChecker extends AsyncTask<Void, Void, Void> { 

         protected Void doInBackground(Void... args) { 
              DomLoginParser parser = new DomLoginParser(url);    
              if(parser.parse())    {   
                  Login.loginSuccessful = true;    
              }    else    {        
                  Login.loginSuccessful = false;    
              }    
             return null;     
         }     

         protected void onPostExecute(Long result) {         
           // finish the activity    
         } 

    }

要调用此方法,请将onCreate方法更新为以下内容:

@Override        
public void onCreate(Bundle savedInstanceState) {                   
      super.onCreate(savedInstanceState);                    
      Bundle extras = getIntent().getExtras();            
      if(extras !=null) {                
         url = extras.getString("url");            
      }                    
      setContentView(R.layout.splashscreen);            
      url += "login/?userName=" + Login.loginName + "&password=" + Login.password;                    
      new LoginChecker.execute();
}