若是target到API 21,有一些注意的事項,如下是目前我發現的兩個問題
1. Service must be explitict,從Lollipop開始,service必須顯性聲明,解決方案:http://blog.android-develop.com/2014/10/android-l-api-21-javalangillegalargumen.html
源代碼參考
`sdk/sources/android-21/android/app/ContextImpl.java`html
private void validateServiceIntent(Intent service) { if (service.getComponent() == null && service.getPackage() == null) { if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) { IllegalArgumentException ex = new IllegalArgumentException( "Service Intent must be explicit: " + service); throw ex; } else { Log.w(TAG, "Implicit intents with startService are not safe: " + service + " " + Debug.getCallers(2, 3)); } } }
2. Material Design 按鈕文字默認大寫,相關連接:https://code.google.com/p/android-developer-preview/issues/detail?id=487,奇怪吧,看看源代碼就知道java
<style name="TextAppearance.Material.Button"> <item name="textSize">@dimen/text_size_button_material</item> <item name="fontFamily">@string/font_family_button_material</item> <item name="textAllCaps">true</item> <item name="textColor">?attr/textColorPrimary</item> </style>
3. 補充一點, 謝謝@King Sing提供。 JobScheduler 是能夠經過System serviceContext.getSystemService(Context.JOB_SCHEDULER_SERVICE)來得到的,它不依賴於implicit service或者是explicit service,但explicit service是能夠與JobScheduler交互,參考sample,https://github.com/googlesamples/-JobScheduler。 在app中聲明的explicit service,用電是在app頭上,因此使用者看到的結果是android os 耗電不會很高,取而代之是各類app在耗電list裹。
4. Material Design Action Bar 默認是有shadow的,是由於新的elevation API, 因此你想去除它,要買在action bar style 的xml中,定義elevation 屬性爲0,要麼android
getActionBar().setElevation(0)