序文
今日は気まぐれでした.もともと記事を書いてJianshuに掲載したかったのですが、彼がそれを許可しないとは思っていませんでした.彼は所管官庁の要求に従って、すべてのユーザー出版物を9月28日まで休止いたします。この気持ちわかりますか? 実はずいぶん前からcsdnに記事を投稿したいと思っていたのですが、なかなか時間が取れませんでした。社会に出たばかりの新人Android開発エンジニアです。記事を書く主な目的は、自分の仕事の経験を記録することです。早速、今日の本題に入ります。
現在の Android の細分化は実はかなり深刻で、オープンソースのシステムであるため、携帯電話メーカーごとに独自の Rom が存在します。各メーカーの適応は、私のような勤勉な後輩の新人 Android 開発プログラマーにとって大きな問題です。でも、今日私が話しているのは適応についてではありません、ハハハ。
先ほど言ったことはばかげているかもしれませんが、今日話したいのは、再現できないバグに遭遇したときのポジショニング方法の1つです。
問題の原因
開発したアプリが自分の携帯電話でスムーズに死んだことに遭遇したことがあるかどうかはわかりませんが、結果として、顧客はそれを使用するとすぐに問題を抱えていました。それが今の私です。会社のアプリが私の携帯電話で実行されているときは、非常に速く起動しましたが、一部の顧客の手に渡ると、開くのが難しくなりました。メイン インターフェイスを表示するのに 10 秒以上かかります。
なんというUX!! ! !
ソリューション
すべての携帯電話に問題があるわけではないため、まずコード ロジックのバグを除外します。ほとんどの場合、サードパーティの問題です。しかし、やみくもに解決することはできません。まず、どこで問題が発生しているかを突き止める必要があり、解決できるかどうかにかかわらず、まず問題の場所を特定する必要があります。(実は最初は頭のないニワトリのようでした。Baiduで起動速度を改善する方法を調べました。サードパーティの初期化をメインスレッドに入れるべきではないなど)その後、本当に方法がありませんでした。経験者に相談し、
ポジショニングの問題について学びました。今話しましょう。
正直なところ、自分の携帯電話とテスト済みの携帯電話に問題がない場合、顧客はアプリが使いにくいと言い続けます。したがって、ポジショニング方法は次のとおりです。
位置決め方法
まず第一に、これが起こる理由を考えなければなりません. これにはいくつかの理由があります:
1. 初期化中にサードパーティのフレームワークがスタックしている可能性があります (メインスレッドがネットワークまたはその他の理由でブロックされている)
2. ネットワークが良くない
3. ローカル データの取得 何か問題が発生しました
...
まあ、あなたがそれを開くとすぐに、それはそうでなければなりませんオンクリエイトメソッドには関係があります. 内部のプロセスを理解したら、この記事の焦点に入ることができます.
集中
バックグラウンド サーバーが必要です。バックグラウンドがわかっている場合は、主にアプリによってアップロードされたデータを表示するために使用される小さなデモを作成します。背景がない場合はどうなりますか?? バイドゥはそれを自分で理解し、実現する、知識を広げていく方法です。しかし、これには時間がかかります。じゃあどうすればいいの?これは簡単に処理できます。会社のバックグラウンドに助けを求めるだけです。これを達成するのは非常に簡単です。
その後、バックグラウンド サーバーのデモの準備が整い、アプリでナイフの使用を開始します。サードパーティ フレームワークの各初期化の最後に、現在の携帯電話モデル、ネットワーク ステータス、残りのメモリ、初期化されたサードパーティ情報、および最も重要な完了時間 (ミリ秒単位) をアップロードします。何?これらの入手方法がわかりませんか?これについては、次の記事で詳しく説明します。このように、ユーザーが開くテスト アプリを作成すると、時間を比較することで、どのステップが遅いアクセスの原因であるかがわかります。これ以上言うのは無駄です、栗をあげましょう:
/**
* 初始化极光推送SDK
*/
JPushInterface.setDebugMode(true);
JPushInterface.init(context);
//调用网络访问封装类,上传 Log 日志数据
new MyLibraryLogAPI().uploadLog("initApp", "App", LogTestUtils.produceLogMsg(this, "极光推送初始化"), 1);
LogTestUtils.produceLogMsg(this, "Jiguang push initialization") これは、次のように必要な値を取得するためのものです。
public static String produceLogMsg(Context context,String problemSite){
String logMsg=null;
logMsg="调试哪个步骤造成卡顿:" +
" 当前手机:" + getDeviceBrand()+" "+getSystemModel()+
" 时间:"+getLogTimeString() +
" 本机总内存大小:" +getTotalMemory(context)+
" 当前可用内存大小:" +getAvailMemory(context)+
" 网络状态:" + getAPNType(context)+
" 停留的定位:"+problemSite;
return logMsg;
}
ここまででアプリの操作は終了ですが、とてもシンプルですね。主な理由は、背景の処理が少し難しいことです。ははは
アプリをコンパイルして携帯電話でテストすると、バックグラウンド サーバーがアップロードしたデータを印刷し、バックグラウンドの結果マップを添付します。
このように、初期化は一目瞭然で、お客様にパッケージ化してアプリを開いてもらうだけで、どこに問題があるかを突き止めることができます。!
注意深い友人は、私が示した結果グラフが非常に正常であるように見え、各初期化がミリ秒で完了することに気付くかもしれません。そうです、本当に問題はありません。問題がどこにあるのかまだ特定できていないので、はははは、少なくとも顧客の問題が第三者によって初期化されたものではないことがわかりました。次のステップはネットワークおよびローカル データ取得位置。
要約する
これは問題の位置付けの方法であり、他にもっと良い方法があるに違いありません。なぜなら、私は次の 1 つの言葉を固く信じているからです。
合言葉は簡単ではありません。いいねとフォローをお願いします。これは私の最初の正式な記事でもあります。間違いがあれば、批判して修正してください。??
最後に、神図が下にたどり着きました。