Black screen before Splash screen appear in android

前端 未结 7 1506
遇见更好的自我
遇见更好的自我 2020-11-30 20:22

We know that when the app do some long process like downloading some information from internet it could show a splash screen before loading the application and when the app

相关标签:
7条回答
  • 2020-11-30 20:49

    Add this line in your AndroidManifest.xml to the Launcher Activity:

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen

    0 讨论(0)
  • 2020-11-30 20:50

    You can solve this bug by converting image as a brush(color).

    Add new file xml(splash_bg.xml) file in the drawable folder, like this.

    <?xml version="1.0" encoding="utf-8" ?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
       <item>
          <color android:color="@color/splash_bg_color"/>
       </item>
       <item>
            <bitmap
                android:src="@drawable/splash_screen"
                android:tileMode="disabled"
                android:gravity="center"/>
       </item>
    </layer-list>
    

    Now add a new style, and apply splash_bg.xml as a background color.

    <style name="Theme.SplashBg" parent="android:Theme">
        <item name="android:windowBackground">@drawable/splash_bg</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
    

    Apply this new style to your main launcher activity or splash screen.

    [Activity(Label = "label", MainLauncher = true, Theme = "@style/Theme.SplashBg")]
    public class SplashScreenActivity : Activity
    
    0 讨论(0)
  • 2020-11-30 20:54

    If you call some "heavy code" in onCreate the screen will appear black until it is done loading. You might consider using AsyncTask and make the onCreate handle setContentView etc, and make the AsyncTask handle "the heavy code".

    0 讨论(0)
  • 2020-11-30 20:58

    the better solution to avoid this problem is using AsyncTask, here is a sample code that i use in one of my ListActivity:

     private class YoutubeTask extends AsyncTask<URL, Integer, String> {
         protected void onPreExecute() {
                super.onPreExecute();
                mLoadingProgress.startAnimation(mDisappear);
            mLoadingProgress.setVisibility(View.GONE);
                showDialogProgress();
        }
    
         protected String doInBackground(URL... url) {
    
             youtubeData = VersionParser.readFromUrl(url[0]);;
    
            try {
    
                JSONObject jsono = new JSONObject(youtubeData);
                JSONObject feed = jsono.getJSONObject("feed");
                JSONArray entry = feed.getJSONArray("entry");
    
                for(int i = 0 ; i < entry.length() ; i++ ){
    
                    JSONObject item = entry.getJSONObject(i);
    
                    JSONArray AUTHOR = item.getJSONArray(TAG_AUTHOR);
                    JSONObject Author = AUTHOR.getJSONObject(0);
                    JSONObject author = Author.getJSONObject("name");
                    String author_name = author.getString(TAG_TITRE);
    
                    JSONObject Statistics = item.getJSONObject("yt$statistics");
                    String Views = Statistics.getString(TAG_VIEWS);
    
                    JSONObject Media = item.getJSONObject("media$group");
    
                    JSONObject MediaTitle = Media.getJSONObject("media$title");
                    String title = MediaTitle.getString(TAG_TITRE);
    
                    JSONObject DURATION = Media.getJSONObject("yt$duration");
                    String duration = DURATION.getString(TAG_DURATION);
    
                    JSONArray Thumbinail = Media.getJSONArray("media$thumbnail");
                    JSONObject IMAGE = Thumbinail.getJSONObject(0);
                    String image = IMAGE.getString(TAG_CONTENT);
                    String id = image.substring(22,33);
    
                     map = new HashMap<String, String>();
    
                        map.put(TAG_TITRE , title ); 
                        map.put(TAG_ID , id );
                        map.put(TAG_DURATION , duration );
                        map.put(TAG_IMAGE , image);
                        map.put(TAG_VIEWS , Views );
                        map.put(TAG_AUTHOR , author_name);
    
                       CURRENCY.add(map);
                    }
    
    
            } catch (JSONException e) {
    
                e.printStackTrace();
            }
                return null;
            }
    
    
         @Override
            protected void onPostExecute(String result) { 
    
                 dismisDialogProgress(); 
                 mListView.setVisibility(View.VISIBLE);
                mListView.startAnimation(mAppear);
                mAdapter = new MAdapter(youtubeSearch.this , CURRENCY);
                mListView.setSelector(R.drawable.home_bg);
                mListView.setAdapter(mAdapter);
    
                 } 
        }
    

    and inside the onCreate Methode implement this:

                @Override
    
        public void onCreate(Bundle savedInstanceState) {
    
            if (Build.VERSION.SDK_INT < 11)
            setTheme(android.R.style.Theme_Black_NoTitleBar);
        }
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
    
        new YoutubeTask().execute(new URL("https://gdata.youtube.com/feeds/api/videos?q=Adele&max-results=15&v=2&alt=json"));
            }
    
    0 讨论(0)
  • 2020-11-30 20:59

    Here's some food for thought; maybe you don't have a sizeable initialization delay in your application at all; you might in fact, be waiting for the instant run service.

    From what I've experienced, the symptoms of this are that your application shows a lengthy black screen whilst initializing, but upon debugging you find that none of your Application/Activity's onCreate methods have yet to even be called whilst it's visible.

    0 讨论(0)
  • 2020-11-30 21:06

    Add a theme with the background you are using to your application tag in the manifest file to prevent the black screen to be drawn.

    theme.xml

    <resources>
    <!-- Base application theme is the default theme. -->
    <style name="Theme" parent="android:style/Theme" />
    
    <style name="Theme.MyAppTheme" parent="Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@drawable/my_app_background</item>
    
    </style>
    </resources>
    

    AndroidManifest.xml

    ....
    <application
            android:name="@string/app_name"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/Theme.MyAppTheme"
             >
    ....
    

    Read why there is a black screen here On app launch, Android displays a simple preview window (based on your activity theme) as an immediate response to the user action. Then the preview window crossfades with your actual UI, once that has fully loaded. To ensure a smooth visual transition, your activity theme should match your full UI as closely as possible. The below image shows how the experience can be jarring if not handled properly.

    0 讨论(0)
提交回复
热议问题