以下是本周的知識清單:
- RemoteViews
- PendingIntent
- JNI & NDK & ADB & AAPT
- 一點小感悟
1.RemoteViews
官方介紹: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資源文件,該類提供了一些基本的操作方法來修改所描述的視圖內容。
a.作用:為跨進程生成控件和修改控件屬性提供一系列方法
注意:RemoteViews只是實現了Parcelable 接口,嚴格講它并不是一個View,只是一個操作類
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的應用
- 通知:通過
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
-
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
- 全稱:Native Development Kit,是Android的一個工具開發包,由Android提供
- 作用:用于快速開發C、 C++的動態庫,并自動將so和應用一起打包成 APK
- 關系:在AndroidStudo上通過NDK實現JNI的功能
- 使用:官方:NDK入門指南
- 實戰:Android:JNI 與 NDK到底是什么?(含實例教學)
c.ADB
- 全稱:Android Debug Bridge,即安卓調試橋
- 作用:是一個命令行窗口,用于電腦端與模擬器或真實設備交互
- 命令:adb操作命令集合
- 應用:adb命令打開DDMS下的文件樹、DDMS下文件導出
d.AAPT
- 全稱:Android Asset Packaging Tool,即Android資源打包工具
- 作用:查看、創建、更新ZIP格式的文檔附件,將資源文件編譯成二進制文件,存于SDK的build-tools目錄下,在build scripts和IDE插件時會使用這個工具打包apk文件構成一個Android 應用程序
- 命令:Android AAPT詳解
4.一點小感悟
近日最大的感受就是——年味不要太濃!年前年后那兩周一直都處于“人不齊”狀態、初八開工以來收紅包收到手軟、到處品嘗同事從家鄉帶來的年貨、出去聚餐也有了“正當”理由、元宵節的湯圓好好吃...進來感受下開工日的盛況~騰訊開工刷紅包堪比“春運",沙發板凳姜茶暖寶寶全上場
這周對我年前寫的代碼進行了review,來了十幾個大佬,雖然提前做了準備但是還是緊張,短短一個半小時真的學到很多,除了技術上的收獲,也給我今后再準備類似會議提供一些啟發,例如,在講代碼前要先交代好背景,不是所有人都清楚具體需求,減少解釋成本;演示大綱很有必要,但也要隨時準備被提問各種問題、打亂節奏;最好走個完整流程來展示代碼邏輯,只看代碼的改動部分很難被理解...總之第一次做review還是挺不錯的體驗,非常感謝小哥哥們的耐心和建議~
隨著學生時代最后一個假期的結束,為期兩個月的短暫的實習生活也快結束了,還要回校準備令人頭大的論文,預計最后還有一篇實習周記和一篇《Android Gradle權威指南》的讀書筆記,待七月畢業再回來就是有名分的鵝啦!