gpt4 book ai didi

Android 应用程序首次启动非常慢,systrace 显示 30 秒的 bindApplication

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:03 32 4
gpt4 key购买 nike

我目前正在开发一个 Android 应用程序并尝试改进启动时间。为此,我使用了 Systrace工具。

我第一次运行该应用程序(安装后立即),需要大约 40 秒才能启动,我得到了这个跟踪:

First run

如您所见,有一个 30 秒的浅紫色标签,标题为 bindApplication

在此之后,我关闭应用程序(从最近的 Activity 中滑开)并重新打开它。这次 bindApplication 标签只有 4 秒长:

Second run

  • 有人知道第一次运行这么长时间是否正常吗?
  • 我可以做些什么来改进它?

我的猜测是 bindApplication 在某种程度上与 onCreate App 方法中的繁重工作有关,但我不明白这是怎么发生的。以防万一:在我的 onCreate 中,我初始化了以下库:Parse、Crashlytics、Timber、ParseFacebookUtils 和 Google Analytics。

编辑:

这是 App 的子类代码:

public class MyApp extends Application {

private Tracker tracker;

@Override public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.beginSection("MyApp");
}
Fabric.with(this, new Crashlytics());

// Parse setup
Parse.enableLocalDatastore(this);
ParseObject.registerSubclass( ... );

Parse.Configuration.Builder parseConfigBuilder = new Parse.Configuration.Builder(this).applicationId(
getString(R.string.parse_application_id))
.server(getString(R.string.parse_server_url));

if (BuildConfig.DEBUG) {
// add logs
Timber.plant(new DebugTree());
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
parseConfigBuilder.addNetworkInterceptor(new ParseLogInterceptor());
}

Parse.initialize(parseConfigBuilder.build());

ParseFacebookUtils.initialize(this);

ParseInstallation.getCurrentInstallation().saveInBackground();

AnalyticsManager.getInstance().init(this);
AnalyticsManager.getInstance().debugMode(BuildConfig.DEBUG);

if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().
detectAll()
.penaltyLog()
.build());
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.endSection();
}
}

/**
* Gets the default {@link Tracker} for this {@link Application}.
* @return tracker
*/
synchronized public Tracker getDefaultTracker() {
if (tracker == null) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
// To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG
tracker = analytics.newTracker(R.xml.global_tracker);
}
return tracker;
}
}

最佳答案

是即时运行的问题。我曾经遇到过这种问题,我通过禁用即时运行来解决。这是同一个问题,您可以在问题的评论中找到答案。

First launch take long time (ClassLoader referenced unknown path)

关于Android 应用程序首次启动非常慢,systrace 显示 30 秒的 bindApplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407916/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com