現在、Androidアプリを開発中で、開始時間を改善しようとしています。これを行うには、Systraceツールを使用しています。Androidアプリの最初の起動は非常に遅く、systraceは30秒のbindApplicationを表示します
私は(右後にインストールされている)アプリケーションを実行する最初の時間は、それが起動する〜40秒かかり、そして私は、このトレースを取得:
あなたが見ることができるように、30秒があります薄い紫色のタグ、タイトルはbindApplication
です。
この後、私はアプリを閉じて(最近のアクティビティからスワイプして)、再び開きます。今回はbindApplication
タグはわずか4秒の長さ:それはそう長く取るために最初の実行のために、通常のかどう
- 誰もが知っていますか?
- 改善のために何ができますか?ここ
私の推測では、bindApplication
がonCreate
のApp方法に重い仕事に何らかの形で関係していることですが、私はそれが起こる可能性がどのように表示されません。 それが役に立った場合:私のonCreate
では、Parse、Crashlytics、Timber、ParseFacebookUtils、Google Analyticsというライブラリを初期化します。
EDIT:
ここでは、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;
}
}
前に 'あなたのアプリケーションのランチャー活動のonCreate'は、サブクラス化-Applicationクラスのコードが実行されます。あなたは、あなたのアプリケーションクラスの中に初期化やその他の長期実行コードを持っていますか?また、あなたがパフォーマンスを探すことができる1つのエリアかもしれません... – AADProgramming
@AADTechnical私はちょうど上記のライブラリを、長時間実行しているコードを初期化します。 – FlyingPumba
私はあなたがこれらのすべての初期化を行っているコードを表示する必要があると思います。パフォーマンス問題があるコードを見ずに推測するのは難しいです... – AADProgramming