孔子は言った:古の確認、教師としての役割を果たすことができます。「論語」 - 孔子
パフォーマンスの最適化のような第二の列は、この記事を読む前に読み取ることができる()Androidの溶液ならびに白黒画面の原点は、この記事をより良い効果を読み出します。
アプリの完璧なスタートは、間違いなくユーザーに良い経験のアプリケーションを最初に時間を与えません。
アプリケーションを構築するとき、私たちはしばしばいくつかのサードパーティのSDKを参照する必要があるが、プロジェクトの事業の増加に伴い、より多くのサードパーティのライブラリを引用し、私たちのonCreate()メソッドのアプリケーションでいくつかのサードパーティの主張は、それを初期化します。この手段は:でメソッドを実行する際、最初のアクティビティレイアウトレンダリング時間が長く対応するであろう。Application
onCreate()
越长
私たちがしている場合は同様に、Activity 的 onCreate(),onStart(),onResume() 方法中执行的任务时间过长
同じレイアウトのレンダリング時間ストレッチにつながることができます。問題のような直接の結果は、ユーザーが時間に、製品や事業者は3メートル、ハハ、冗談を超える殺すために剣を置くかもしれませんが、ページのロードうちに遅れ、ユーザーエクスペリエンスの低下感を感じないだろう。
資格の開発者として、我々は、Appを画面に描画する方式で、その後、最初のページに呼ばれることを知っています。我々は通常のみに焦点を当てる必要がありますApolication 中的 onCreate() 方法
、第一个 Activity 中的onCreate() ,onStart() ,onResume() 方法
。なお:それから、他のページの活動にあれば最初のスタートアプリのアクティビティで、活動だけではなく、独自のロジックを持っていますが、まだのonCreate()、ONSTART()または直接ジャンプでonResume()メソッド跳转后的 Activity 的这三个方法也需要进行优化
。
まあ、ロリーそれは、我々が最も懸念している、束を言うために繰り返しを最適化するには、ああを心配しない方法を、具体的にここに来て誠意が乾燥品の完全であることを確認するためにいくつかのソリューションです。
1.アプリの起動時間検出
ターミナルのAndroid Studioで次のコマンドを入力します。
adb shell am start -W [项目包名]/[要启动的Activity的名字]
例如:
adb shell am start -W com.imooc.imooc_voice/com.imooc.imooc_voice.view.loading.LoadingActivity
私はここに始まっLoadingActivityで、SplashActivityは、次の3つのターミナル時間がある見ることができます
This Time
:アクティビティを最後に開始時間。
Total Time
:活動の一連の時間を開始します。
Wait Time
:総起動時間に、コールドスタートを含むシステムは、アプリ情報をメモリにロードする必要があります。
この1で、我々は、最適化することができますTotal Time
あなたが長すぎる感じを開始する時間を使用することを提供し、この部分を。だから、どのように我々は最終的にはコードの一部である知っている、またはロード時間が長すぎるとき、あなたが知る必要があるの三者SDKの初期化のどの言います代码执行时间统计的方法
。
2.コードの実行時間の統計
1.我们在自己的 Application 文件中 加入以下代码,这是我自己项目中的 Application 文件
:
public class ImoocVoiceApplication extends Application {
private static ImoocVoiceApplication mApplication = null;
@Override
public void onCreate() {
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory(),"app.trace");
Debug.startMethodTracing(file.getAbsolutePath());
mApplication = this;
//视频SDK初始化
VideoHelper.init(this);
//音频SDK初始化
AudioHelper.init(this);
//分享SDK初始化
ShareManager.initSDK(this);
//更新组件下载
UpdateHelper.init(this);
//ARouter初始化
ARouter.init(this);
Debug.startMethodTracing();
}
public static ImoocVoiceApplication getInstance() {
return mApplication;
}
}
2.我们通过命令获取 trace 文件
:
adb pull /storage/emulated/0/app.trace
3.将 trace 文件 直接拖到 Android Studio 中,如下图所示
:
以下、この図からわかるように、私自身のプロジェクトはこれです時間がかかりARouter
、初期化してShareSDK
、私はここで選んだ、初期化はTop Down
次のモジュールを表示するためには、私が最も便利で、あなたがこれを表示するモジュールをクリックすることができると思います個人的な習慣を参照してください。
今、あなたが問題を知っていることを、どのようにそれを最適化するために、ここでは2つのオプションが与えられます。
1.初期化がここでメインスレッドで実行される、スレッドは、非同期の方法で処理してもよいです。
- 注:非同期スレッド上でいくつかの初期化を入れた場合は、初期化コード
不能有创建 Handler 的操作
、不能有 UI 操作
一方で、この方法は、制限され对异步要求不高
ますが、非同期モードではない、あまりにも長い初期化時間を最適化することを、これは、イベントを防ぐためですあなたのデータは、ホーム画面まで待つ必要があるかもしれませんAppliction
初期化インタフェースに到達するために完了すると、あなたは、より少ないデータ収集をもたらすことができる非同期スレッド、上の初期化動作の一部となります。
2.遅延ロード。
- 以下のように一部の開発者
Application
の初期化OKHttp
に時間がかかり、行くを初期化するために使用される遅延ロードを、解決するために使用することができますOKHttp
。
ここで私は、これら二つのアイデアを提供していますが、具体的な内容はまだだけでなく、実用的なアプリケーションを最適化するよう、あなた自身のニーズに応じてプロジェクトの動作を最適化する必要があります。あなたは、最適化のより良いアイデアを持っている場合はもちろん、私たちは一緒に成長し、一緒に進行一緒に、議論を歓迎します。
テキストの最後に書かれました
紙はZhongjueはこの練習が不可欠です知って来ます。「冬はショーのサブゆうを読んだ」 - 呂を
プログラムのコードでアプリの起動時間の最適化、それはこれに来るとき達成するために、我々は、最適化するために、彼らのプロジェクトと連携して、記事に与えられたプロトコルに従ってすることができます。