Middle+
Որտե՞ղ եք փնտրելու ծրագրի դանդաղ և սառը մեկնարկի պատճառները:
sobes.tech AI
Պատասխան AI-ից
- Նախագծման օբյեկտների ինիցիալիզացիա: Ծախսատար գործողություններ
Application.onCreate()կամ առաջին Activity-ում, ինչպիսիք են տվյալների բեռնումը, գրադարանների ինիցիալիզացիան: - Ֆայլերի ընթերցում: Մեծ քանակությամբ տվյալների ընթերցում ֆայլերից բեռնումի ժամանակ:
- Տվյալների բազայի գործողություններ: Ամենաթույլ հարցումներ կամ մեծ քանակությամբ գործողություններ տվյալների բազայի հետ բեռնումի ժամանակ:
- Ռեսուրսների բեռնում: Ավելորդ կամ օպտիմիզացված ռեսուրսների բեռնում (պատկերներ, XML դասավորություններ):
- Ցանց: Սինխրոնային ցանցային հարցումներ գլխավոր հոսքում բեռնումի ժամանակ:
- JIT-կոմպիլյացիա: Ժամանակը, որը ծախսվում է ART-ի կողմից JIT-կոմպիլյացիայի վրա առաջին գործարկման ժամանակ:
- Layout Inflation: Կոմպլեքս կամ խորը View հիերարխիա առաջին Activity-ում, որը պահանջում է երկար ժամանակ ինֆլեյթելու համար:
- Հիմնական հոսքի բլոկավորում: Ամենատև գործողություններ, որոնք կատարվում են գլխավոր հոսքում բեռնումի ժամանակ:
Գործիքներ:
- Android Profiler (CPU Profiler, System Trace):
- Startup Profiler (մասնագիտացված գործիք դասի ինիցիալիզացիայի ժամանակը չափելու համար):
- Traceview/Systrace (ֆունկցիաների կանչերի մանրամասն վերլուծություն):
- logcat (կասկածելի լոգների կամ սխալների որոնում բեռնումի ժամանակ):
adb shell am start -W <փակետ_անուն>/<ակտիվության_անուն>(ընդհանուր բեռնումի ժամանակի չափում):
// Ժամանակի չափման օրինակ
class MyApplication : Application() {
override fun onCreate() {
val startTime = System.currentTimeMillis()
super.onCreate()
// Երկար տևողությամբ ինիցիալիզացիա:
// MyDatabase.initialize(this)
// SomeLibrary.setup()
// LoadInitialData.execute()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "Application onCreate տևեց ${endTime - startTime} ms")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Ծախսատար գործողություններ UI կամ տվյալների հետ
// setupRecyclerView()
// loadContentFromNetwork()
val endTime = System.currentTimeMillis()
Log.d("StartupTime", "MainActivity onCreate տևեց ${endTime - startTime} ms")
}
}
Կենտրոնացում Application.onCreate() և առաջին Activity-ի կյանքի ցիկլի առաջին մեթոդների վրա (onCreate, onStart, onResume).