在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Building Apps with Connectivity & the Cloud
Launch mode 和 Intent flags專題
Canvas & Drawables
UTAustinX_UT.9.01x: Effective Thinking Through Mathematics
《JavaScript 語言精粹》
Memory leak專題
React基礎(chǔ)
《Test Driven Development: By Example》一書
Developer tools
安卓開發(fā)技能樹
<a rel="nofollow" href="https://mp.weixin.qq.com/s?__biz=MzA3NDM
Best Practices for Interaction and Engagement
各個安卓版本引入的主要新特性
Building Apps with Connectivity &amp; the Cloud
List.toArray()再強(qiáng)轉(zhuǎn)是一定會失敗的
深入Android frameworks
Google dev 100 days系列視頻
Building Apps with Contacts &amp; Sign-In
關(guān)系型數(shù)據(jù)庫設(shè)計范式
《App研發(fā)錄》一書
REST API設(shè)計
Google IO 2015摘要
自定義View/ViewGroup以及高性能實(shí)現(xiàn)自定義UI
安卓系統(tǒng)點(diǎn)擊事件處理
《50 Android Hacks》一書
Building Apps with Content Sharing
Flux基礎(chǔ)
<a rel="nofollow" href="http://developer.android.com/training/in
依賴注入(以Dagger 2為例)
Java同步機(jī)制
Java對象內(nèi)存的使用情況
JSR133(Java memory model)
Google官方Material Design手冊(<a rel="nofollow" href="http://develop
Futurice公司安卓團(tuán)隊的建議
安卓性能優(yōu)化
  • 1.
Best Practices for Performance
<a rel="nofollow" href="http://www.vogella.com/tutorials/Android
<a rel="nofollow" href="http://blog.danlew.net/2014/11/19/styles
Handling Runtime Changes
<a rel="nofollow" href="http://www.vogella.com/tutorials/Android
Building Apps with Graphics &amp; Animation
<a rel="nofollow" href="http://tools.android.com/tech-docs/new-b
Android項目架構(gòu)
MVP(Model-View-Presenter)模式
<a rel="nofollow" href="http://www.infoq.com/cn/es6-in-depth/"">
《Android源碼設(shè)計模式解析與實(shí)戰(zhàn)》一書
Rx在Android中的最佳實(shí)踐
函數(shù)調(diào)用時,傳遞參數(shù)應(yīng)該是不可變的(Immutable)
ProGuard
面向?qū)ο罅笤瓌t(SOLID+)
深入理解Java虛擬機(jī)
深入Java深淺拷貝、immutable、unmodifiable
Best Practices for User Input
UI上的一些高效方式/最佳實(shí)踐
<a rel="nofollow" href="https://blog.stylingandroid.com/ripples-
Best Practices for User Interface
安卓測試驅(qū)動開發(fā)/安卓測試驗(yàn)證
暗時間:學(xué)會正確思考
技術(shù)筆記
Aspect Oriented Programming(AOP)
Best Practices for Background Jobs
安卓系統(tǒng)動效專題
Feed系統(tǒng)的設(shè)計
Data binding(MVVM,Model-View-ViewModel)
Effective Java一書筆記
<a rel="nofollow" href="http://developer.android.com/training/in
Rx (Reactive eXtention)
MultiDex專題
一些很棒的點(diǎn)子
WebRTC

Building Apps with Connectivity &amp; the Cloud

Connecting Devices Wirelessly

  • Using Network Service Discovery,局域網(wǎng)下的服務(wù)提供、發(fā)現(xiàn)框架
    • 自己可以提供服務(wù),然后通過NSD框架暴露在本地局域網(wǎng)(注冊服務(wù)):mNsdManager.registerService;
    • 利用NSD框架,發(fā)現(xiàn)本地局域網(wǎng)的服務(wù)提供者:mNsdManager.discoverServices
    • 解析發(fā)現(xiàn)的服務(wù):mNsdManager.resolveService,解析成功的回調(diào)中,NsdServiceInfo參數(shù)攜帶了服務(wù)提供者(server)的信息,供建立連接;
    • 根據(jù)解析的結(jié)果(協(xié)議,地址),自行建立連接,進(jìn)行通信即可
    • 當(dāng)app退出,activity退出(onPause, onDestroy)時,需要將NSD服務(wù)取消注冊
  • 利用Wi-Fi建立P2P連接
    • 聲明權(quán)限:ACCESS_WIFI_STATE, CHANGE_WIFI_STATE, INTERNET
    • 監(jiān)聽系統(tǒng)廣播事件:
      • 定義一個BroadcastReceiver,對收到的WifiP2p廣播(wifi p2p狀態(tài)變化、peer列表變化、p2p連接變化、peer信息變化等)進(jìn)行響應(yīng)
      • 在activity中注冊BroadcastReceiver
    • 發(fā)現(xiàn)設(shè)備:mManager.discoverPeers,mManagerWifiP2pManager對象,通過getSystemService獲得
    • 在BroadcastReceiver收到peer列表變化廣播后,獲取peer列表:mManager.requestPeers
    • 建立p2p連接:mManager.connect
    • 建立連接成功后,BroadcastReceiver會收到連接狀態(tài)變化的廣播,此時可以獲取peer的詳細(xì)地址信息,供建立socket連接用:mManager.requestConnectionInfo
  • 使用Wi-Fi P2P進(jìn)行服務(wù)發(fā)現(xiàn)
    • NSD框架需要設(shè)備處于同一局域網(wǎng)下,而Wi-Fi P2P則無需設(shè)備接入網(wǎng)絡(luò)
    • 聲明權(quán)限:ACCESS_WIFI_STATE, CHANGE_WIFI_STATE, INTERNET
    • 注冊自己提供的服務(wù):WifiP2pDnsSdServiceInfo.newInstancemManager.addLocalService
    • 發(fā)現(xiàn)附近的服務(wù)提供者
      • WifiP2pManager.DnsSdTxtRecordListener
      • WifiP2pManager.DnsSdServiceResponseListener
      • mManager.setDnsSdResponseListeners(channel, dnsSdServiceResponseListener, dnsSdTxtRecordListener)
      • mManager.addServiceRequest
      • mManager.discoverServices

Performing Network Operations

  • 進(jìn)行網(wǎng)絡(luò)通信
    • 大部分都采用HTTP協(xié)議,選擇HTTP client很重要,OkHttp已被安卓6.0作為系統(tǒng)默認(rèn)HTTP client
    • 進(jìn)行網(wǎng)絡(luò)連接之前,需呀檢查一下網(wǎng)絡(luò)是否可用(僅僅是檢查是否接入網(wǎng)絡(luò),并不能檢測是否可以訪問互聯(lián)網(wǎng)):ConnectivityManager.getNetworkInfo(type)ConnectivityManager.getActiveNetworkInfo()NetworkInfo.isConnected()
    • 也可以把網(wǎng)絡(luò)訪問出錯的處理集中起來,總之,要么所有網(wǎng)絡(luò)訪問之前都進(jìn)行網(wǎng)絡(luò)檢查,要么網(wǎng)絡(luò)訪問出錯之后集中處理,這樣代碼更簡潔優(yōu)雅
    • 網(wǎng)絡(luò)訪問不能在UI線程上執(zhí)行,使用RxAndroid可以方便的進(jìn)行異步操作
  • 管理網(wǎng)絡(luò)使用
    • 通常,為用戶提供以下設(shè)置選項,比較好:同步頻率,是否僅在wifi下聯(lián)網(wǎng)等
    • 監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化:使用一個監(jiān)聽ConnectivityManager.CONNECTIVITY_ACTION廣播的BroadcastReceiver,接收網(wǎng)絡(luò)狀態(tài)變化事件
    • 在代碼中注冊/反注冊BroadcastReceiver,可以控制其活躍期
    • 如果在manifest中聲明,則其活躍期將是系統(tǒng)啟動到系統(tǒng)關(guān)閉,此時可以通過PackageManager.setComponentEnabledSetting(...)方法啟用/禁用組件
  • 解析XML

Transferring Data Without Draining the Battery

  • 典型手機(jī)蜂窩網(wǎng)絡(luò)狀態(tài)機(jī)

    http://wiki.jikexueyuan.com/project/notes/images/mobile_radio_state_machine.png" alt="典型手機(jī)蜂窩網(wǎng)絡(luò)狀態(tài)機(jī)" />

  • APP的網(wǎng)絡(luò)請求應(yīng)該考慮蜂窩網(wǎng)絡(luò)的特性:積攢多個請求,集中發(fā)送;適當(dāng)預(yù)?。环e攢多次請求的數(shù)據(jù),但是使用同一次請求批量發(fā)送;
  • 使用DDMS/AndroidStudio的網(wǎng)絡(luò)監(jiān)控工具,可以查看APP網(wǎng)絡(luò)請求的特征,并進(jìn)行適當(dāng)優(yōu)化
  • 進(jìn)行數(shù)據(jù)備份、數(shù)據(jù)同步時,可以把網(wǎng)絡(luò)請求交給GSM,它會將任務(wù)延遲至充電時、連接wifi時、或者是進(jìn)行上述打包操作
  • 適當(dāng)緩存,以減小網(wǎng)絡(luò)數(shù)據(jù)的傳輸
  • 調(diào)整網(wǎng)絡(luò)請求的模式,wifi、高帶寬時,集中請求大量數(shù)據(jù),減少網(wǎng)絡(luò)請求的頻率和次數(shù)
  • 更多關(guān)于電量優(yōu)化的內(nèi)容,還需要在有實(shí)際開發(fā)需求的時候,進(jìn)行實(shí)踐和深入

Backing up App Data to the Cloud

  • 安卓系統(tǒng)提供了自動同步的功能,不過是同步到google drive,每個app擁有25MB的空間
  • 同步有較好的開始策略(充電,連接wifi,處于空閑狀態(tài),或者24小時未同步),但是當(dāng)25MB空間用完之后,沒有備份替換策略,僅僅是停止備份
  • API 23起,系統(tǒng)默認(rèn)備份APP的所有數(shù)據(jù),可以在manifest中進(jìn)行添加或排除,通過android:fullBackupContent指定配置文件
  • API 23之前的版本,系統(tǒng)提供了BackupAgent接口,同樣也是備份到google服務(wù)器
  • google還提供了Cloud Save service,用于保存數(shù)據(jù)(不是備份應(yīng)用數(shù)據(jù)),同一用戶在不同設(shè)備保存數(shù)據(jù)時,會有沖突,Cloud Save service也提供了相應(yīng)的沖突處理接口

Transferring Data Using Sync Adapters

  • 安卓系統(tǒng)提供了一個用于和自己服務(wù)器同步數(shù)據(jù)的框架:Sync Adapter
  • 使用該框架可以享受系統(tǒng)的調(diào)度服務(wù),提升電池性能,提升網(wǎng)絡(luò)訪問性能;該框架是異步的,對于實(shí)時同步需求,無法使用此框架;
  • 先創(chuàng)建一個AbstractAccountAuthenticator子類,以及一個Service用于連接AccountAuthenticator和Sync adapter框架,authenticator用于和自己的服務(wù)器進(jìn)行認(rèn)證,即便不需要認(rèn)證,也需要實(shí)現(xiàn)一個空的authenticator
  • AccountAuthenticator創(chuàng)建一個metadata xml描述文件,把Service聲明到manifest中,并且使用AccountAuthenticator的metadata
  • sync adapter框架需要content provider來與之配合使用;如果不想使用content provider保存數(shù)據(jù),也需要提供一個空的content provider實(shí)現(xiàn),然后用自己的方式進(jìn)行數(shù)據(jù)存儲;
  • 將content provider聲明在manifest中
  • 實(shí)現(xiàn)AbstractThreadedSyncAdapter子類,用于響應(yīng)系統(tǒng)發(fā)出的同步通知,執(zhí)行自己的數(shù)據(jù)同步邏輯
    • onPerformSync()中執(zhí)行數(shù)據(jù)同步
    • onPerformSync()在后臺線程被調(diào)用,所以無需再次自行創(chuàng)建后臺線程
    • 可以嘗試在onPerformSync()中執(zhí)行除了數(shù)據(jù)同步之外更多的網(wǎng)絡(luò)請求,以集中網(wǎng)絡(luò)請求,提示網(wǎng)絡(luò)、電池效率
  • 創(chuàng)建一個Service,用于連接ThreadedSyncAdapter和Sync adapter框架
  • AccountAuthenticator類似,ThreadedSyncAdapter及其Service也需要定義metadata、聲明到manifest文件中
  • 在Activity中創(chuàng)建一個account,它將用于Sync adapter框架
  • AccountAuthenticator、ThreadedSyncAdapter都使用了binder機(jī)制,用于系統(tǒng)進(jìn)程進(jìn)行跨進(jìn)程調(diào)用,獲取自定義的AccountAuthenticator和ThreadedSyncAdapter實(shí)例,并執(zhí)行其方法
  • sync adapter框架支持多種觸發(fā)機(jī)制,高效不失靈活
    • 基于服務(wù)器的消息推送,表明服務(wù)器數(shù)據(jù)發(fā)生了變化
    • 本地數(shù)據(jù)變化事件觸發(fā)(需要使用content provider)
    • 本地網(wǎng)絡(luò)事件,由系統(tǒng)發(fā)送,自動進(jìn)行
    • 定期執(zhí)行
    • 定時執(zhí)行
    • 按需執(zhí)行

Transmitting Network Data Using Volley

  • volly是一個HTTP網(wǎng)絡(luò)請求的封裝庫,支持schedule,并發(fā),兩級緩存,優(yōu)先級,取消,可定制等特性
  • volly執(zhí)行流程

http://wiki.jikexueyuan.com/project/notes/images/volley-request.png" alt="../assets/volley-request.png" />

  • 內(nèi)置了StringRequest,JsonObjectRequest,JsonArrayRequest,ImageRequest請求類,用于把響應(yīng)數(shù)據(jù)轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式
  • 也可以自定義實(shí)現(xiàn)Request

Building Apps with Location & Maps

  • Google play service提供的相關(guān)服務(wù):automated location tracking, geofencing, and activity recognition
  • ...