我的Android应用程序的第一个活动,"启动器活动",很快完成。它的目标是重定向到MainActivity或UserLoginActivity,具体取决于shared-preferences变量的值。
如果此变量不存在,它会自动为MainActivity执行StartActivity。 如果设置了此变量,那么它将对我的API执行HTTP请求,以便对用户进行身份验证。然后它将启动MainActivity。 HTTP请求通常不到一秒钟。
问题是我想在LauncherActivity的中心显示一个进度条,这样用户就可以理解正在加载的东西。 问题是屏幕上没有显示任何内容。但是,如果我评论开始活动的行,那么它将显示...似乎活动持续时间太快而无法显示任何内容!
我认为调用setContentView()方法会立即在屏幕上加载Views。我的情况是正常行为吗?我怎么能在屏幕上显示进度条,知道活动将持续大约一秒钟?
在这里,您可以看到我的启动器活动
realloc()
和.xml资源文件
calloc()
谢谢, 奥斯卡
答案 0 :(得分:0)
我认为调用setContentView()方法会立即在屏幕上加载视图
不,因为你还在onCreate()
,所以不会赢。如果你想看到任何你需要让活动循环更进一步的UI,那么重新编写代码或将你的身份验证转移到单独的活动,meybe?
PS:你没有任何真正的理由使用this.
。
答案 1 :(得分:0)
感谢您的帮助。我使用AsyncTask来从API中获取数据。 主UI线程现在可以加载视图。
这是一些非常简化的代码,可能可以帮助其他人。
public class UserSmartAuthActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_smart_auth);
new SmartAuth().execute();
}
private class SmartAuth extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Context context = getApplicationContext();
YokiAPI API = new YokiAPI(context);
Intent intent = null;
try {
if (API.authenticateSmart(YokiGlobals.preferences.getSavedUserId(context)))
intent = new Intent(context, MainActivity.class);
else
intent = new Intent(context, UserLoginActivity.class);
} catch (Exception e){}
startActivity(intent);
finish();
return null;
}
}
}