鵝廠實習| 週記(三)

如下是本週的知識清單:

  • RemoteViews
  • PendingIntent
  • JNI & NDK & ADB & AAPT
  • 一點小感悟

1.RemoteViewshtml

官方介紹:A class that describes a view hierarchy that can be displayed in another process. The hierarchy is inflated from a layout resource file, and this class provides some basic operations for modifying the content of the inflated hierarchy. 翻譯:一個描述視圖的類,該視圖能夠在另外一個進程中顯示。構造時須要制定一個layout資源文件,該類提供了一些基本的操做方法來修改所描述的視圖內容。java

a.做用:爲跨進程生成控件和修改控件屬性提供一系列方法python

注意:RemoteViews只是實現了Parcelable 接口,嚴格講它並非一個View,只是一個操做類 android

b.使用性能優化

  • 構造函數:經常使用的構造方法以下(包名,佈局資源文件id)
public RemoteViews(String packageName, int layoutId) {
    this(getApplicationInfo(packageName, UserHandle.myUserId()), layoutId);
}
複製代碼
  • 經常使用方法:更多方法見開發文檔
    • setTextViewText(int viewId, CharSequence text):設置TextView顯示的文字
    • setImageViewResource(int viewId, int srcId):設置ImageView顯示的圖片
    • setOnClickPendingIntent(int viewId, PendingIntent pendingIntent):設置View的監聽事件

c.應用場景:具體步驟見5.1RemoteViews的應用ide

  • 通知:經過NotificationManager#notify()
  • 桌面小部件 :經過AppWidgetProvider

d.優缺點函數

  • 優勢:使用傳統方式、RemoteViews方式實現跨進程更新UI的對比,經過一次IPC可實現對多個View的操做,詳見Android神奇"控件"一一RemoteViews
  • 缺點:支持View類型以下,不支持它們的子類和其餘類型的View,更沒法自定義View

FrameLayout、LinearLayout、RelativeLayout、GridLayout、AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView、AdapterViewFlipper、ViewStub工具

推薦閱讀:源碼分析見Android UI之跨進程組件RemoteViews源碼分析


2.PendingIntent佈局

a.做用:是待定Intent,讓意圖在合適的時間再執行,而不是當即執行

b.經常使用構造

  • public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags):打開頁面
  • public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags):發送廣播
  • public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags):開啓服務

c.參數描述

  • context:上下文
  • requestCode:PendingIntent發送方的請求碼,通常設爲0
  • intent:意圖,當PendingIntent發生時,效果與startActivity()、sendBroadcaset()、startService()同樣
  • flags:常見的類型以下
    • FLAG_ONE_SHOT:描述的PendingIntent只能使用一次,以後會被cancel
    • FLAG_NO_CREATE:若描述的PendingIntent不存在,直接返回null而不是建立
    • FLAG_CANCEL_CURRENT :若描述的PendingIntent已存在,則都會被cancel,以後再建立一個新的
    • FLAG_UPDATE_CURRENT:若描述的PendingIntent已存在,就都會被update

實例Notification 通知

d.匹配規則:知足內部Intent相同且requestCode也相同,則兩個PendingIntent是相同的


3.JNI & NDK & ADB & AAPT

a.JNI

  • 全稱:Java Native Interface,即Java本地接口,由Java提供
  • 做用:用於Java與C/C++交互,即Java能夠經過JNI調用本地的C/C++代碼、本地的C/C++的代碼也能夠調用java代碼

b.NDK

c.ADB

d.AAPT

  • 全稱:Android Asset Packaging Tool,即Android資源打包工具
  • 做用:查看、建立、更新ZIP格式的文檔附件,將資源文件編譯成二進制文件,存於SDK的build-tools目錄下,在build scripts和IDE插件時會使用這個工具打包apk文件構成一個Android 應用程序
  • 命令Android AAPT詳解

4.一點小感悟

近日最大的感覺就是——年味不要太濃!年前年後那兩週一直都處於「人不齊」狀態、初八開工以來收紅包收到手軟、處處品嚐同事從家鄉帶來的年貨、出去聚餐也有了「正當」理由、元宵節的湯圓好好吃...進來感覺下開工日的盛況~騰訊開工刷紅包堪比「春運",沙發板凳薑茶暖寶寶全上場

這周對我年前寫的代碼進行了review,來了十幾個大佬,雖然提早作了準備可是仍是緊張,短短一個半小時真的學到不少,除了技術上的收穫,也給我從此再準備相似會議提供一些啓發,例如,在講代碼前要先交代好背景,不是全部人都清楚具體需求,減小解釋成本;演示大綱頗有必要,但也要隨時準備被提問各類問題、打亂節奏;最好走個完整流程來展現代碼邏輯,只看代碼的改動部分很難被理解...總之第一次作review仍是挺不錯的體驗,很是感謝小哥哥們的耐心和建議~

性能優化tips
隨着學生時代最後一個假期的結束,爲期兩個月的短暫的實習生活也快結束了,還要回校準備使人頭大的論文,預計最後還有一篇實習週記和一篇《Android Gradle權威指南》的讀書筆記,待七月畢業再回來就是有名分的鵝啦!
運動空間——第二條「腰帶」
相關文章
相關標籤/搜索