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

鍍金池/ 教程/ Android/ Building Apps with Contacts & Sign-In
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()再強轉(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以及高性能實現(xiàn)自定義UI
安卓系統(tǒng)點擊事件處理
《50 Android Hacks》一書
Building Apps with Content Sharing
Flux基礎(chǔ)
<a rel="nofollow" href="http://developer.android.com/training/in
依賴注入(以Dagger 2為例)
Java同步機制
Java對象內(nèi)存的使用情況
JSR133(Java memory model)
Google官方Material Design手冊(<a rel="nofollow" href="http://develop
Futurice公司安卓團隊的建議
安卓性能優(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è)計模式解析與實戰(zhàn)》一書
Rx在Android中的最佳實踐
函數(shù)調(diào)用時,傳遞參數(shù)應(yīng)該是不可變的(Immutable)
ProGuard
面向?qū)ο罅笤瓌t(SOLID+)
深入理解Java虛擬機
深入Java深淺拷貝、immutable、unmodifiable
Best Practices for User Input
UI上的一些高效方式/最佳實踐
<a rel="nofollow" href="https://blog.stylingandroid.com/ripples-
Best Practices for User Interface
安卓測試驅(qū)動開發(fā)/安卓測試驗證
暗時間:學(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專題
一些很棒的點子
WebRTC

Building Apps with Contacts &amp; Sign-In

Accessing Contacts Data

  • 官方文檔上使用CursorLoader加載本地通訊錄列表,然后用SimpleCursorAdapter顯示在ListView中,示例比較繁瑣
  • 項目實踐中的代碼:
Cursor cur = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      null, null, null, null);
if (cur == null || cur.getCount() == 0) {
    if (cur != null) {
        cur.close();
    }
    throw new RuntimeException("Permission denied"); // 不同系統(tǒng)行為不一樣,有的是cursor為null,有的是cursor數(shù)據(jù)為空
}
while (cur.moveToNext()) {
    String name = cur.getString(
            cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    String phone = cur.getString(
            cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    //...
}
cur.close();
  • 可以通過發(fā)送Intent實現(xiàn)對通訊錄的修改,會啟動系統(tǒng)通訊錄應(yīng)用,在其中讓用戶進行確認修改,這種方式無需修改通訊錄權(quán)限:
Intent intent = new Intent(Intents.Insert.ACTION);
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
intent.putExtra(Intents.Insert.EMAIL, mEmailAddress)
      .putExtra(Intents.Insert.EMAIL_TYPE, CommonDataKinds.Email.TYPE_WORK)
      .putExtra(Intents.Insert.PHONE, mPhoneNumber)
      .putExtra(Intents.Insert.PHONE_TYPE, Phone.TYPE_WORK);
startActivity(intent);
  • API 14以上的系統(tǒng),啟動通訊錄應(yīng)用修改完通訊錄后,按下返回鍵不會回到原來的APP,API 15以上可以用以下辦法解決:
// Sets the special extended data for navigation
editIntent.putExtra("finishActivityOnSaveCompleted", true);

Adding Sign-In

Google提供的授權(quán)API,讓用戶可以使用Google賬戶授權(quán)登錄app,享用Google賬戶關(guān)聯(lián)的優(yōu)勢。