First, the preface
Before reading this article, you need to understand a few things first:
1. What is the cold start time for Android?
Cold start time is the time between when the user clicks the app from the desktop of the mobile phone and the Activity
calling method of the startup page onCreate()
.
2. What happened during the cold start time period?
First we need to know what happens when you open one, and Activity
Activity
if the one that belongs to is Activity
Application
not started, then the system Activity
creates a process for this (every process creates a call Application
, so Application
the onCreate()
method may be invoked multiple times, in the process creation and initialization, it is bound to consume some time, in this time, WindowManager
will first load the app in the Theme Style window background (windowbackground) as a preview element, and then go to really load the layout, If this time is too long, and the default background is black or white, this will give users an illusion, this app is very card, very not fluent, nature also affected the user experience.
Look at the effect chart:
Not optimized
Optimization Scenario 1
Optimization Scenario 2
Second, eliminate the start of the screen/black screen
When the user clicks on the Mobile desktop app, see the black screen or white screen is actually the first frame before the interface rendering, if you read the article head of the 2 questions, then solve the problem is very easy, nothing more than the theme in the windowBackground
set into our want to let users see the screen can be, Here are 2 ways to do this:
1, set the background map to our app logo, as the app boot, and now most of the apps on the market are doing the same.
<style name= "Appwelcome" parent= "Apptheme" >
<item name= "Android:windowbackground" > @mipmap/bg_ Welcome_start</item>
</style>
2, set the background color to transparent color, so that when users click on the Desktop app picture, and will not "immediately" into the app, and stay on the desktop for a while, in fact, this time the app is already started, but we are scheming to theme in the windowBackground
color set to Transparent, Forced to dump the pot to the mobile phone application manufacturers (mobile phone response is too slow, haha), in fact, now micro-letter is also done, do not believe you can try.
<style name= "Appwelcome" parent= "Android:Theme.Translucent.NoTitleBar.Fullscreen"/>
One thing to note about transparency is that if you introduce theme directly Activity
, the following exceptions may occur at run time:
Java.lang.IllegalStateException:You need to use a theme.appcompat Theme (or descendant) with the this activity.
This is because the use of incompatible theme, such as my inheritance here Activity
, the AppCompatActivity
solution is simple:
1, let it Activity
integrate Activity
and not integration of compatibilityAppCompatActivity
2, in onCreate()
the method super.onCreate(savedInstanceState)
before setting up our original app theme
public class Mainactivity extends Appcompatactivity {
@Override
protected void OnCreate (Bundle Savedinstancestate) {
settheme (r.style.apptheme);
Super.oncreate (savedinstancestate);
}
2 of the above approaches, we all need to introduce theme into the correspondingActivity
<activity
android:name= ". App.main.MainActivity"
android:theme= "@style/appwelcome"
android: screenorientation= "Portrait" >
<intent-filter>
<action android:name= " Android.intent.action.MAIN "/>
<category android:name= android.intent.category.LAUNCHER"/>
< /intent-filter>
</activity>
Iii. about startup optimization
The above practice can actually achieve "seconds open" app effect, but it is not real speed, in the activity creation process is actually going through a series framework
of layers of operation, in the daily development, we will go to rewrite the Application
class, and then in the Application
initialization of some operations, such as the static user identification TOKEN
, the initialization of Third-party SDK and so on.
Here are a few suggestions:
1, do not let Application
participate in the operation of the business
2, do not APPlication
take time-consuming operations, such as some developers in their own app in a series of folders or files (such as myself), these I/O operations should be put "when it is really used to create" or some of the database operations.
3, do not use static variables in the way of Application
saving data and so on.
Of course, this is the absolute idealism, the above "do not" 2 words before adding "as far as possible" 2 words, after all, in the actual development, it does make us a lot easier.
Yes, add, layout is also very important, as far as possible to reduce the complexity of the layout, layout depth, because in the View
process of drawing, measurement is also very expensive performance.
OK, the above is the Android cold start to implement app seconds open all the content, I hope this article content for everyone to develop the app can help, if there is doubt can message exchange.