我创建了一个带有背景和进度条的加载页,当它完成加载时,它会启动主类,但加载屏幕没有显示。加载时它只是一个黑屏,然后是主屏幕。我把所有的工作都放在了onResume上,我也尝试了onStart而没有运气
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loadpage);
//get rid of title bar
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(1);
}
@Override
public void onResume() {
super.onResume();
words = WordList.sharedWordList(this);
if(generatedLevels==null)
{
generatedLevels = new ArrayList<PuzzleMZLen>();
}
if(!p.isAlive())
{
p.start();
}
Intent i = new Intent(getApplicationContext(), Main.class);
startActivity(i);
}
提前致谢
答案 0 :(得分:8)
您必须使用AsyncTask进行此类工作。完成加载后会填充您的布局。所以您正在观看黑屏。
使用onPreExecute
类的AsyncTask
来显示进度条。并在doInBackground
方法中编写加载代码。
答案 1 :(得分:3)
绝对使用AsyncTask。我的应用程序也有同样的事情,这是我的代码:
private class getAllData extends AsyncTask<Context, Void, Cursor> {
protected void onPreExecute () {
dialog = ProgressDialog.show(Directory.this, "",
"Loading. Please wait...", true);
}
@Override
protected Cursor doInBackground(Context... params) {
DirectoryTransaction.doDepts();
return null;
}
protected void onPostExecute(Cursor c) {
for(int i = 0 ; i < DeptResults.length ; i++){
deptsAdapter.add(DeptResults[i][0]);
}
dialog.dismiss();
}
}
onPreExecute
方法加载一个ProgressDialog,它只显示“正在加载。请稍候......”。 doInBackground
做了我的应用程序加载的内容(在我的情况下从服务器抓取和解析文本)然后onPostExecute
填充一个微调器然后解雇ProgressDialog。对于进度BAR,你会想要一些不同的东西,但AsyncTask将非常相似。使用新的onCreate
getAllData.execute(this);
中调用它
答案 2 :(得分:1)
如何创建良好的启动活动有一个很好的方法。
要防止ANR,您应该将所有数据加载到UI线程之外,就像在其他答案中提到的那样。请使用AsyncTask或任何其他类型的多线程。
然而,要删除烦人的黑屏,在某些慢速设备上显示片刻,您需要执行下一步:
bg_splash
drawable。它将在时间活动显示给用户时显示而不是黑色背景。例如,它可以是品牌颜色背景上的品牌标识。创建初始屏幕主题并将其放入/res/values/themes.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyApp.Splash" parent="@style/Theme.Sherlock.Light.NoActionBar">
<item name="android:windowBackground">@drawable/bg_splash</item>
</style>
</resources>
不要忘记通过更新AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1" >
...
<application>
<activity
android:name=".SplashActivity"
android:theme="@style/MyApp.Splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<activity>
...
</application>
</manifest>