如何做一个编码良好的闪屏

Ser*_*iro 7 java android splash-screen android-asynctask

我们都知道有很多关于如何在Android上进行启动画面的教程.但我们也知道这些都是伪闪屏.我搜索了很多,我总是看到Thread.sleep(x).这不是很好的编码,这只是为了使应用程序美观,看起来像一个专业的应用程序,这不是我想要的!
这些启动屏幕的另一个问题是它们无法解决我的问题,因为它们仅在活动开始显示并显示内容视图.

我有一个应用程序在初始化时执行很多操作,当应用程序启动时,用户会看到黑屏几秒钟,有足够的时间来烦恼.所以这就是为什么我想要显示一个编码良好的启动画面,删除在设置内容视图之前出现的黑屏.

我试了一下.我将启动画面(a RelativeLayout)包含在设置的布局中MainActivity,但据我所知,Android只会在加载完所有内容后显示内容,所以如果我试图从内容视图中显示一些视图我有等到一切都结束了.不过,我会发送我的代码,它可以帮助某种方式......

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new SplashTask().execute();
}

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

    @Override
    protected void onPreExecute() {
        initializeViews();
        mSplashScreen.setVisibility(View.VISIBLE);
    }

    @Override
    protected Void doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPostExecute(Void params) {
        Standard.Initiate(MainActivity.this);
        verifyListStats();
        loadListAdapters();
        setOnClickListeners();
        mSplashScreen.setVisibility(View.GONE); 
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图加载一些资源,doInBackground(...)但因为我做了一些操作onResume()需要那些资源我不能这样做(或者至少我认为我做不到).

任何的想法?我听说过类似于iOS发布图像的内置机制,也许这可能是一种方式.

XGo*_*het 5

当一个活动启动时,Android会启动一个Zygote,一个不执行任何操作的空活动,并在其上设置您的活动主题,然后启动它.一旦您的活动准备好显示,它就会将显示的活动交换给您的活动.有关Zygote的更多信息,您可以阅读Cyril Motier 撰写的这篇文章

所以要回答你的问题,你可以这样做:

  1. 创建一个小主题,自定义窗口背景显示您的启动信息(您可以使用9补丁来中心未缩放的内容);
  2. 在您的清单中,将此启动主题用于您的活动;
  3. 在你的activity的onCreate()方法中,调用setTheme(R.id.yourActivityTheme)(在setContentView()之前调用它);
  4. 请享用...

这样,在您的活动准备好显示之前,您的"启动画面"(即:具有您的启动主题的受精卵)将一直可见.