Android缓慢的冷启动时间

时间:2019-02-13 15:09:36

标签: android android-activity time android-inflate cold-start

我遇到了一个非常奇怪的问题,需要协助解决。它与长时间的应用冷启动时间有关。这意味着,我的应用程序需要很长时间才能启动并首次显示。考虑到此处提供的材料,我已经研究了疑难解答:

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();
   }
}

就像我说的那样,超级基础/骨架。

0 个答案:

没有答案