Android 開発で操作の遅延を避ける必要があるのはなぜですか?

序文

開発では、多かれ少なかれ遅延操作を使用する必要があるいくつかのシナリオが含まれますが、遅延操作は実際には適切な選択ではなく、適切なソリューションでもありません。今回は遅延運用を利用したシナリオと回避方法をまとめてみましたが、今回は比較的基本的な内容です。

タイムラプスを使ったシーン

私たちが最初に開発に関わったとき、基本的に、問題に対する脳のない解決策は 2 つしかありませんでした。それは、例外のキャプチャと遅延です。例外キャプチャはわかりやすい. クラッシュに遭遇して原因を分析できない場合, 多くの場合は try-catch を追加することで回避できます.繰り返しになりますが、結局のところ、クラッシュによって引き起こされたバグは解決が容易です。

実はディレイ操作もこんな感じで、どこに問題があるのか​​見当がつかず、ランダムにやってみると、どこかに数秒のディレイを加えると正常に動作することがわかりました。実際、これは例外キャプチャのランダムな追加と同じであり、トラブルシューティングがより困難になることが多いため、問題が発生した場合は落ち着いて問題を解決し、この方法を使用しようとしないでください。これは、遅延操作が発生してはならない方法でもあります。

ビューの幅と高さを取得する

最初に連絡を取ったときは、ビューの幅と高さが正しく取得されないことが多く、view.getHeight() を使用したところ、取得した高さが 0 でした。やみくもに試して、最終的に 1 の遅延を追加しようとしました。高度は秒単位で取得できます。

しかし、これは解決策ではありません. 現時点では、ビューの描画プロセスを理解し、最初に値が取得できない理由を調べて、ソースコードに移動するのが正しいアプローチです (もちろん、最初はソースコードをやみくもに読むのが少し難しいです)、これを見て、これはどのようなメカニズムであり、これらを組み合わせたり、他の人の分析を組み合わせたりして、ソースコードを見れば簡単にわかります。

view.post を使用する理由がわかります

通常のクエリ サーバーの結果

アプリを持っている場合、いつ乗っ取られたか、いつ他の人からメッセージを受け取ることができるかなどをどのように知ることができますか? http リクエストをサーバーに送信して時々ステータスをチェックするタイマーを作成する人がよくいます。

詳細に注意すれば、これはもちろん問題ありませんが、websocket と呼ばれるプロトコルについて聞いたことがありますか? http ではなく、ws で始まるリンクをいくつか見たことがあるでしょう。MQTT と呼ばれるプロトコルについて学んだことがありますか? 学んだことがなくても問題ありません. 私の基本的な記事を読むことができます: juejin.cn/post/713918… , さらには、スマート ハードウェアのレベルまで上昇します. したことはありますか? IOTとは何か理解できましたか?

もちろん、ポーリング要求に問題があるという意味ではありません。いくつかの詳細、割り込みなどを処理する必要があるだけです。また、必要な効果を達成するためのより良い方法がある場合でも、より良いもの?

しかし、ローカルタスクを定期的に実行したい場合は、タイマーを使用しても問題ありません. 重要なのは、いくつかの詳細、ライフサイクル、割り込み操作、一時停止操作などを処理することです.

放送順

複雑なマルチアプリケーションの状況では、多かれ少なかれブロードキャストが使用されることがよくありますが、実際には、ブロードキャストの登録とブロードキャストの送信にはシーケンスの問題があります。ロジックの一部でブロードキャストが最初に送信され、次に反対側が登録される可能性があります。その後、ブロードキャストを受信できない状況が発生します。この問題に簡単に対処するために、遅延を追加してブロードキャストの送信を遅らせる人もいます。

となると、これは実は非常に危険な作業であり、正しい方法は、放送をある程度理解することです。スティッキー放送と呼ばれる放送の種類があることがわかります.この分野の知識に精通していても、まだ理解していないか、このシーンに適用できない場合は、より良い情報が得られるでしょう.この問題を解決する方法は、この安全でない操作を遅らせることではありません。

初期化の遅延

Application や onCreate で初期化操作をしすぎるのはよくないことは誰もが知っている.最適化と起動速度の最適化は誰もが知っているので、これらの場所では初期化を行わない. それからいくつかのトリックを思いつく人もいるでしょう。私はこれらの場所に遅延を追加し、1〜2秒遅延してから初期化することで、起動速度を最適化し、対応する機能が使用される前に初期化しますね.美しい?どう思いますか

あなたの遅延の原理、ハンドラー メカニズムは何ですか。IdleHandler と呼ばれるものを知っていますか?

実際、IdleHandler を単独で使用するのは安全な操作ではないため、最初に使用するときに関数を初期化しないでください。初期化に手間がかかると、初回使用時に初期化してしまうとユーザーエクスペリエンスに影響を与えると言う人もいるかもしれません。この問題に対して、普段は併用して IdleHandler で初期化し、初回使用時に初期化されていないと判断された場合は初期化しています。特定のニーズに応じて、いくつかの場所で特別な状況を実行できます。

タイムラプスを使ったシーン

delay は非常に危険な操作であり、通常はこれを置き換えるより良い方法があるため、delay 操作を使用せずに kill する必要がありますか? いいえ、使用しないのは本当によくない場合もありますが、いつ使用する必要がありますか? もちろん、他の方法でこの問題を解決する方法はありません。使用しますが、注意して使用してください。

例えば、誰かの図書館に電話したら、その図書館が操作をして、私に電話をかけてくる、というのが基本的な流れです。しかし、このライブラリはあなたのものではありません. 彼がバグを書いたか、何らかの理由であなたに彼のメソッドを呼び出させたのかもしれませんが、彼はあなたにコールバックを提供しません. この場合、何もしなければずっとここで立ち往生してしまいます。

このような状況では、通常はタイムアウト メカニズムが使用され、処理をより安全に行うことができます.たとえば、20 秒間電話をかけ直さないと、失敗を返します. もちろん、この問題についてはまずライブラリの作者に相談する必要があると思いますが、本当に他に方法がないので、このようなトリックを使用しています。

ただし、これを行う場合は、ステータスに注意してください。たとえば、タイムアウトした場合、この時点で彼から電話がかかってきたらどうしますか? したがって、この方法では、安全性を確保するために多くのことを記述する必要があります。

また、以前から操作が多かったローディング時ですが、ローディング時はすぐに菊を表示するのではなく、0.5秒遅れて表示するようにしています。

もちろん、最初に遅延を書きたいと思います。次に、いくつかのバージョンを作成した後、最適化したいことを上司に伝え、次に遅延を削除します。明らかに速いかどうかを確認し、このようにプレイしたい場合は、言わなかったことにする。

また、遅延についてもこだわりがあり、例えば、ページが表示されてから、ページを再描画して更新してから何らかの操作を行っているのですが、どうすればいいのですか? システムにはそれを実現する方法があります.遅延を行います(例を示すためにここにいます)、画面の更新が16msであることを知る必要がありますが、描画が終了していない場合は、安全のために次の更新に置かれます。設定できますより高い場合、80 ミリ秒の遅延を設定できますが、1 秒または 2 秒に設定する必要はありません。

遅延に注意

遅延操作の使用を避けるようにする必要があると言うのはなぜですか。この操作は確かに落とし穴でいっぱいであり、Android の遅延操作のほとんどは postDelayed で実装されるためです。

まず第一に、問題、中断の問題を考慮する必要があります。中断メカニズムが必要です。たとえば、アクティビティで遅延操作を実行しましたが、アクティビティは破棄され、引き続き操作を実行する必要があります。遅延時間はいつですか?そのため、ハンドラ メッセージはアクティビティの onDestroy で削除されます。

割り込みを追加するとしますが、それだけで安全ですか? 中断すると、メッセージの処理が既に開始されていると考えたことはありますか。そのため、このとき状態を判断する必要があり、この状態によってActivityが破棄されているかどうかが判断され、消費されてしまうと以降の操作が行われなくなります。

これはシナリオの 1 つにすぎません. 実際, 遅延時間の使用は危険な場合が多いので, 使用には注意が必要です. 使用できる場合は必要ありません. 使用する必要がある場合は,よく考える必要があります。

読者を共有する

筆者は2013年にJavaからAndroid開発に転向し、小さな工場からファーウェイやOPPOなどの大工場での勤務を経て、2018年4月にアリに入社し、現在に至る。

インタビューを受け、多くの人にインタビューしました。ほとんどのジュニアおよびミドルレベルの Android エンジニアは、スキルを向上させたいと考えており、自分で手探りして成長することがよくあります. 非体系的な学習効果は非効率的で長く、天井にぶつかって技術が停滞しやすい.

アリ P7 レベルの Android アーキテクト向けの完全な学習教材をまとめました。特に、3 ~ 5 年以上の経験を持つ小規模なパートナーの詳細な学習と改善に適しています。

主に Tencent をはじめ、ByteDance、Alibaba、Huawei、Xiaomi、およびその他の第一線のインターネット企業の主流のアーキテクチャ テクノロジが含まれています。必要な場合は、お持ちください。

Tencent T3 アーキテクト ラーニング スペシャル マテリアル

学習効率が低く、正しいガイダンスが不足していると感じている場合は、下の QR コードをスキャンして、豊富なリソースと強力な学習環境を備えた技術サークルに参加して、一緒に学び、コミュニケーションすることができます!

グループ内には第一線の技術者が多く、小さな工場や外注企業で働くコードファーマーもおり、対等で質の高いAndroidコミュニケーションの輪を作ることを心がけています。短期的には誰の技術も飛躍的に進歩しますが、長期的には、ビジョン、パターン、および長期的な開発の方向性が最も重要です。

35歳でのミドルエイジクライシスの多くは、短期的な興味に駆られて早々に価値を搾り取ってしまうものですが、最初から正しい長期的なキャリアプランを立てることができれば。35歳を過ぎると、あなたは周りの人よりも価値が高くなります.

おすすめ

転載: blog.csdn.net/Eqiqi/article/details/130268805