Android面接1日1問(8 Day)

2220 ワード

Androidアプリケーションはメッセージによって駆動され、システムは各アプリケーションのためにメッセージキュー(MessageQueue)を維持し、アプリケーションのメインスレッドは絶えずこのメッセージキューからメッセージ(Looper)を取得し、これらのメッセージを処理(Handler)し、メッセージによってアプリケーションを駆動する実行を実現する.
HandlerはAndroidアプリケーション全体で重要な場所を占めているので、面接では、面接者がその原理を理解しているかどうかをよく調べ、大体の流れを明確に表現することができ、コミュニケーションと表現能力が技術能力よりも重要になることがあります.
面接問題:AndroidのHandlerメカニズムを話してもらえますか?
Androidのメッセージメカニズムを明らかにするには、Handlerに関連するいくつかのクラスを先に説明する必要があります.
Message:メッセージは、ボタン、タッチなどのハードウェアによって生成されたメッセージと、ソフトウェアによって生成されたメッセージに分けられる.MessageQueue:メッセージ・キューの主な機能は、メッセージ・プールにメッセージ(MessageQueue.enqueueMessage)とメッセージ・プールを取り出すメッセージ(MessageQueue.next)を配信する.Handler:メッセージ支援クラスで、主な機能はメッセージプールに各種メッセージイベント(Handler.sendMessage)を送信し、対応するメッセージイベント(Handler.handleMessage)を処理する.Looper:繰り返し実行(Looper.loop)を実行し、配布メカニズムによってメッセージをターゲット処理者に配布します.
Handler関連クラスのコード量はそれほど多くないので、みんなが見てみることをお勧めします.ネット上にもこれらのソースコードを紹介し分析する文章がたくさんあります.みんな自分でGoogleを見てください.コードを一度通過すると、プロセス全体の理解が深まり、話すと余裕があります.面接のために裏書することはお勧めしません.
面接では、Handlerの仕組みを明確に伝えることができれば、実際の開発で注意していることを主に聞きます.たとえば、ワークスレッドで独自のメッセージ・キュー・インスタンスを作成するにはどうすればいいですか?
実は側面から彼が正しいかどうかを検証し、Looperを呼び出すことを知っているかどうかを検証したいのです.prepare(スレッドごとに1回しか実行できません).
あるいはHandlerThreadを使ったことがあるかどうか、何かメリットとデメリットがあるかどうかなどを聞いてみましょう.
注意:Handlerによるメモリの漏洩
ActivityでこのようにHandlerを作成するのは普通です.
    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

        }
    };

しかし、実際には上のコードがメモリの漏洩を引き起こす可能性があります.Android lintツールを使用すると、このような警告が表示されます.
In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class
興味深いのは、この訳文をよく見てみましょう.「AndroidにおけるHandlerによるメモリ漏洩」
結論
Handlerのようなよく知られている概念ですが、実用的で複雑ではありません.面接では、相手の表現が言葉で効果的に文を組織できるかどうかを気にします.最後に1つの問題に対して、やはり少しの細部で相手が正しいかどうかを検証します.一部のネットユーザーはわざといじめられていると思っているかもしれませんが、面接官が一つの質問しかしていない場合は、答えを言ったらすぐに次のテーマを聞いて、あなたとこの問題をもう少し拡張していないと、何も分からないと思っているのではないでしょうか.面接者の本当のレベルを見分けることができるのではないかと疑問に思っています.