如何在启动前避免黑屏?

时间:2011-07-22 15:52:28

标签: android android-activity load

我创建了一个带有背景和进度条的加载页,当它完成加载时,它会启动主类,但加载屏幕没有显示。加载时它只是一个黑屏,然后是主屏幕。我把所有的工作都放在了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);

}

提前致谢

3 个答案:

答案 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或任何其他类型的多线程。

然而,要删除烦人的黑屏,在某些慢速设备上显示片刻,您需要执行下一步:

  1. 创建bg_splash drawable。它将在时间活动显示给用户时显示而不是黑色背景。例如,它可以是品牌颜色背景上的品牌标识。
  2. 创建初始屏幕主题并将其放入/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>
    
  3. 不要忘记通过更新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>