要約の高度なAndroidのトリッキーな問題

一つの問題:Androidの中性子は本当にUIスレッドにそれを更新することはできませんか?

参考解答:
UIスレッドに、子のアクセスが極端なケースで、プログラムがクラッシュしないのonCreate()メソッドで作成されます。以来
ViewRootImplが作成されていない、それがUIスレッドに現在のスレッドかどうかを検出することはできません。

  • ViewRootImplはonResumeで()コールバックメソッドの後に作成されました。
  • ViewRootImplはaddViewのWindowManagerGlobal()メソッドで作成されます。

質問2:アンドロイドなぜメインスレッドはLooper.loop()死のサイクルで立ち往生しないのだろうか?

参考答え:

  • プロセスは、第一の前に、各アプリケーションを実行するプロセスを作成し、接合体による処理は、アプリケーション/サービスおよび他の構成要素上で実行されている様々な活動を実施するためのアウトフォーク。上位アプリケーション・プロセスのためのプログラムは、アプリケーションのAndroidのランタイム上で実行され、その結果、意図的なグーグルである、完全に透過的です。プロセス属性、またはネイティブコードのフォーク・プロセスによって:ほとんどの場合、アプリケーションはAndroidManifest.xmlをしてアンドロイドを設定しない限り、一つのプロセスで実行されます。
  • スレッド:アプリケーションのためのスレッドは、それぞれの新しいスレッドとして、非常に一般的である()新しいスレッドが作成され始めます。共有リソースにするかどうかに加えて、Linuxのプロセスとスレッドの観点から、スレッドとアプリケーションのどこを処理し、間のリソースの共有、および本質的な違いはありませんが何よりもCPUのプロセスやスレッドで実行可能現れの作品よりも、task_struct構造でありますコード、CFSを使用して、CPUスケジューリングアルゴリズムは、各タスクがタイムスライスCPUを楽しむために可能な限り公正ようであることを確認します。
  • スレッドのために、それは実行可能コード、完了した実行可能なコード実行の一部であるため、スレッドのライフサイクルが終了し、スレッドは終了となります。メインスレッドのように、我々はいくつかの時間のために実行するようにしたいことはありません、そして、彼らが終了することを、どのようにそれを生き残ることができたことを確認するために?単純なアプローチは、死のサイクルは、例えば、出口を確保することができませんダウン実行された可能性があり、実行可能なコードであり、バインダー糸は、単にコースの読み取るための異なる方法及びバインダードライブを介して無限ループ、ループの方法及び書き込み、ではありません何のニュースがないとき無限ループ、寝ます。それは死のサイクルとどのように他の事項とそれを対処することですので、しかし、ここで、それはよく、別の問題につながる可能性が?新しいスレッドを作成することによって。本当にフレーム落ちにつながるだろう、でもANRが発生したが、操作のメインスレッドでは長すぎるため、コールバックメソッドのonCreate / ONSTART / onResumeおよびその他の操作で動けなくなり、自分自身をlooper.loopアプリケーションが立ち往生はありません。

質問3:の関係バインダー、IBinder、メソッドはIInterface

参考答え:

  • バインダー:バインダー、およびBinderProxy関連するオブジェクトの概念の意味。
  • IBinder:インタフェース、それはバインダークラスは抽象バインダーで実装します。
  • メソッドはIInterface:インタフェース、AIDLインタフェースを継承しなければなりません。
公開された225元の記事 ウォン称賛64 ビュー20万+

おすすめ

転載: blog.csdn.net/duoduo_11011/article/details/103964961