『クレイジーAndroid講義』学習ノート2

5663 ワード

これは「クレイジーAndroid講義」の2編目の学習ノートで、ブログに記録するのに不便なものがたくさんあります.あるいは、いくつかの知識点を身につけていますが、記録していません.Androidに入門したい学生がいる場合は、本を探してよく見て、コードを叩く必要があります.「クレイジーAndroid講義」コードdemoを添付します.https://github.com/weimuhua/TestLibProject.
  1.StateListDrawableリソースStateListDrawableリソースは、複数のDrawableリソースを整理するために使用され、StateListDrawableをターゲットコンポーネントの背景、前景ピクチャとして使用すると、StateListDrawableオブジェクトに表示されるDrawableオブジェクトは、ターゲットコンポーネントの状態が変化するにつれて自動的に切り替わる.StateListDrawableオブジェクトを定義するXMLファイルのルート要素は、次の属性を指定できる複数の要素を含むことができます.(1)android:colorまたはdrawable:色またはDrawableオブジェクトを指定します.(2)android:state_xxx:特定のステータスを指定します.xxxはstate_のようなシステム定義の状態であってもよいselectedまたはstate_selected、attrsに宣言することもできます.xmlのカスタムステータス.次のようになります.
<declare-styleable name="CalendarPickerView">
        <attr name="android:background" />
        <attr name="tsquare_dividerColor" format="color" />
        <attr name="tsquare_dayBackground" format="reference" />
        <attr name="tsquare_displayHeader" format="boolean" />
        <attr name="tsquare_headerTextColor" format="color" />
    declare-styleable>

  2.LayerDrawableリソースLayerDrawableにはDrawable配列も含まれます.システムはこれらのDrawableオブジェクトの配列順に描画され、インデックスが最も大きいDrawableオブジェクトが一番上に描画されます.LayerDrawableオブジェクトを定義するXMLファイルのルート要素は、(1)android:drawable:LayerDrawable要素の1つであるDrawableオブジェクトを指定する複数の要素を含むことができます.(2)android:id:DrawableオブジェクトのIDを指定します.(3)android:bottom|top|left:長さ値を指定します.
  3.ShapreDrawableリソースShapreDrawableは、基本的なジオメトリを定義するために使用されます.ShapreDrawableを定義するXMLファイルのルート要素は、(1)android:shape=["rectangle"|"oval"|"line"|"ring"]の属性を指定できます.フィレットButtonインスタンス.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    
    <solid android:color="@color/common_blue" />
    
    <corners android:radius="@dimen/common_roundbtn_corner_radius" />
shape>

  4.ClipDrawable ClipDrawableは、他のビットマップからピクチャクリップを切り取ることを表します.ClipDrawableオブジェクトを使用してsetLevel()メソッドを呼び出し、ブロックの領域サイズを設定します.レベルが0の場合、スクリーンショットのクリップは空で、レベルが10000の場合、画像全体をスクリーンショットします.
  5.ContentProvider ContentProviderという概念は私が初めて学んだとき、確かによく理解できなかった概念でした.しかし、Androidに触れる時間が長くなるにつれて、ContentProviderはそれほど理解しにくくないことに気づきました.ContentProviderは、異なるアプリケーションまたは同じアプリケーションの異なるプロセスでデータを共有するために使用されます.ContentProviderは、あるUriの形式でデータを外部に提供し、他のアプリケーションまたは本アプリケーションがプロセス間で呼び出されることを許可します.他のアプリケーションまたは本アプリケーションの他のプロセスは、ContentResoverを介してUriを介して指定されたデータを操作します.開発手順:(1)クラスを定義し、ContentProviderから継承します.(2)このContentProviderをAndroidManifestファイルに登録し、android:authorities要素を指定します.(3)これらの操作データを外部に露出して削除して調べる方法.
  6.サービスはサービスという複雑なコンポーネントについて、私個人に役立つ知識点を主に記録しています.詳しく知りたいなら、本を買うか、公式チュートリアルを参照してよく読むべきです.サービスには、(1)startServiceメソッドと、clientがサービスを終了してもまだ存在する2つの起動方法があります.(2)bindServiceメソッドでは,clientがサービスを終了すると終了する.InentServiceはキューを使用してリクエストIntentを管理し、clientがIntentリクエストを使用してInentServiceを起動するたびに、そのIntentがキュー内にある場合、新しいworkerスレッドを開いて処理します.同じ時刻に1つのIntentのみが処理され、プライマリスレッドがブロックされないことを保証します.IntentServiceのonStartCommandメソッドでは、onHandleIntent()メソッドを書き換えるだけでリクエストIntentがデフォルトでキューに追加されます.ソースコードを見てみると、InentServiceの原理も簡単で、起動後にHandlerThreadを起動してこのスレッドで動作します.そのonStart()メソッドでは、handlerを介してmsgをworkerスレッドに送信し、handlerのhandleMessageでonHandleIntent()メソッドをコールバックするため、InentServiceを継承するサブクラスでonHandleIntent()メソッドを書き換える必要があります.
  7.Broadcast Broadcastは、normal Broadcastとordered Broadcastの2種類に分けられます.(1)normal Broadcastは完全に非同期であり,ほぼ同じ時間にすべての受信者にブロードキャストを受信させる.しかし、受信者は処理結果を次の受信者に渡すことができず、放送の伝播を終了することができない.(2)ordered Broadcastの受信者は,あらかじめ宣言された優先度に従ってBroadcastを順次受信する.優先度は、インベントリファイルに宣言するか、IntentFilterのsetPriority()メソッドで設定できます.ブロードキャストを優先的に受信したreceiverは、abortBroadcast()メソッドを呼び出してBroadcastを終了することができる.結果はsetResultExtra(Bundle)によってBroadcastに格納され、次の受信者に渡すこともできます.