我遇到了一个非常奇怪的问题,需要协助解决。它与长时间的应用冷启动时间有关。这意味着,我的应用程序需要很长时间才能启动并首次显示。考虑到此处提供的材料,我已经研究了疑难解答:
https://developer.android.com/topic/performance/vitals/launch-time
都非常有帮助,但是我尝试了一些不同的尝试。当我们的系统负载很重时,我会看到启动时间问题。我试图将整个活动剥离为仅启动,而没有绘画/膨胀视图。字面上只是启动基础活动。我平均看到冷启动时间为1.45秒。您可能认为这可以,但是我们还有其他应用程序具有完整的实现,并且视图/小部件,数据等的实际膨胀仅需要大约1.17s即可启动。这对我来说非常混乱,因为我实际上只有一个活动(相同的android主题)。我还需要什么?为什么要花这么长时间启动?
请注意,与之比较的活动是在我使用Maven时使用Gradle构建的。我们的Android清单在属性用法方面是相同的。
我还尝试了在启动活动之前启动该过程(在启动时创建了虚拟服务),但是启动时间没有真正的改善。我在Android 4.3.1上,正在通过查看logcat中的ActivityManager条目来确认启动时间。可能是资源加载问题?该构建必须具有一定的意义,因为没有理由为什么裸露的骨骼活动需要更长的时间才能启动,而复杂的骨骼运动要更长。
编辑:添加代码
这是清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="11" android:versionName="debug-11" package="com.my.app">
<uses-permission android:name="com.cnh.android.permission.ACCESS_SETTINGS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<!-- uses-sdk is updated automatically by pom.xml -->
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18"/>
<application android:allowBackup="true" android:debuggable="false" android:icon="@drawable/ic_tab" android:label="@string/app_name" android:name=".App" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:launchMode="singleInstance" android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
应用代码:
package com.my.app;
import android.app.Application;
import android.content.Context;
/**
* base App class used for application
*/
public class App extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
setContext(this);
}
private static void setContext(Context ctx) {
context = ctx;
}
public static Context getContext() {
return context;
}
}
活动代码:
package com.my.app;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
就像我说的那样,超级基础/骨架。