目錄:
1、Service
2、AndroidManifest
3、Github搜索技巧
4、AndroidStudio主題設置
Android小仙
1. Service
Service lifeCycle
從上圖可以看到,
onStart()
方法被onStartCommand()
方法取代了。那么問題來了,
onStart()
和onStartCommand()
的區(qū)別是什么呢?onStart()
是android2.0以下的版本使用的,而onStartCommand()
則是android2.0以上的版本使用的。兩個可以同時使用不會有沖突,執(zhí)行的時候先調用
onStartCommand()
,再調用onStart()
。
1.1. onStartCommand()
方法
public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) {
onStart(intent, startId);
return mStartCompatibility ? START_STICKY_COMPATIBILITY : START_STICKY;
}
主要看四種返回值類型
- START_STICKY:如果service進程被kill掉,保留service的狀態(tài)為開始狀態(tài),但不保留遞送的intent對象。隨后系統(tǒng)會嘗試重新創(chuàng)建service,由于服務狀態(tài)為開始狀態(tài),所以創(chuàng)建服務后一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那么參數(shù)Intent將為null。
- START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執(zhí)行完onStartCommand后,服務被異常kill掉,系統(tǒng)不會自動重啟該服務
- START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執(zhí)行完onStartCommand后,服務被異常kill掉,系統(tǒng)會自動重啟該服務,并將Intent的值傳入。
- START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill后一定能重啟。
1.2. Service永不被kill的方法
- 將service優(yōu)先級設置到最高,1000
- onStartCommand return START_STICKY
- 在Service的onDestroy中,發(fā)送廣播重啟自己
- 設置android:persistent="true"
- Service提升為前臺進程級別
就是在onStartCommand里面調用 startForeground()方法把Service提升為前臺進程級別,然后再onDestroy里面要記得調用stopForeground ()方法。
1.3. 相對強大的進程保活方案
參考資料:
雙進程守護,駐留,殺不死服務:MarsDaemon
其他:參考同類APP的做法,如:<a>閃鈴</a>
1.4. 用戶配置保活
- 設置懸浮窗
- 設置自啟動
- 設置常駐服務
- 設置允許高耗電
2. AndroidManifest
2.1. Application節(jié)點說明
先上例子
<application
android:name=".MyApplication"
android:allowBackup="true"
android:allowClearUserData="false"
android:excludeFromRecents="true"
android:hardwareAccelerated="true"
android:largeHeap="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:persistent="true"
android:theme="@style/AppTheme" >
</application>
簡單的不說,來看看下面的
-
android:allowBackup="true"
允許應用程序參與備份。如果將該屬性設置為false,則即使備份整個系統(tǒng),也不會執(zhí)行這個應用程序的備份操作,而整個系統(tǒng)備份能導致所有應用程序數(shù)據(jù)通過ADB來保存。其默認值為true。 -
android:excludeFromRecents="true"
使應用從最近使用應用列表中剔除 -
android:hardwareAccelerated="true"
使用硬件加速功能。指示硬件加速渲染功能是否對應用程序中的所有Activity和View啟用。其默認值是false。 -
android:persistent="true"
將應用設置為永久性應用,開機自啟。實質就是擁有persistent=true屬性的app將不能被kill或kill后會自動重啟。其默認值是false。 -
android:largeHeap="true"
此屬性指示應用程序是否使用一個比較大的堆創(chuàng)建。它的默認值是false。 -
android:supportsRtl=true
:支持屏幕從右到左
參考資料:Android清單文件詳解(五)----<application>的屬性詳解
2.2. 創(chuàng)建桌面快捷方式適配不同機型
各個手機產商自定義的創(chuàng)建桌面快捷方式的權限
參考:Permissions used in Alipay 9.6.6
uses-permission: name='com.alipay.permission.ALIPAY_UPDATE_CREDENTIALS'
uses-permission: name='com.android.launcher.permission.INSTALL_SHORTCUT'
uses-permission: name='android.permission.BLUETOOTH'
uses-permission: name='android.permission.CHANGE_WIFI_STATE'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.MODIFY_AUDIO_SETTINGS'
uses-permission: name='com.yunos.permission.TYID_MGR_SERVICE'
uses-permission: name='android.permission.RECEIVE_SMS'
uses-permission: name='android.permission.AUTHENTICATE_ACCOUNTS'
uses-permission: name='com.alipay.permission.ALIPAY_USE_CREDENTIALS'
uses-permission: name='com.aliyun.permission.TYID_MGR_SERVICE'
uses-permission: name='android.permission.BATTERY_STATS'
uses-permission: name='android.permission.READ_PHONE_STATE'
uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission: name='android.permission.NFC'
uses-permission: name='android.permission.RECORD_AUDIO'
uses-permission: name='android.permission.READ_SMS'
uses-permission: name='com.taobao.permission.UPDATE_CREDENTIALS'
uses-permission: name='com.yunos.permission.STORAGE_SERVICE'
uses-permission: name='com.sonyericsson.home.permission.BROADCAST_BADGE'
uses-permission: name='com.android.launcher.permission.UNINSTALL_SHORTCUT'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.USE_CREDENTIALS'
uses-permission: name='android.permission.VIBRATE'
uses-permission: name='com.yunos.permission.TYID_SERVICE'
uses-permission: name='android.permission.ACCESS_FINE_LOCATION'
uses-permission: name='android.permission.FLASHLIGHT'
uses-permission: name='com.taobao.permission.USE_CREDENTIALS'
uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'
uses-permission: name='android.permission.MANAGE_ACCOUNTS'
uses-permission: name='android.permission.CALL_PHONE'
uses-permission: name='android.permission.READ_LOGS'
uses-permission: name='android.permission.GET_ACCOUNTS'
uses-permission: name='android.permission.GET_TASKS'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='com.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.htc.launcher.permission.READ_SETTINGS'
uses-permission: name='com.majeur.launcher.permission.UPDATE_BADGE'
uses-permission: name='com.aliyun.permission.TYID_SERVICE'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='android.permission.BLUETOOTH_ADMIN'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.SYSTEM_ALERT_WINDOW'
uses-permission: name='com.htc.launcher.permission.UPDATE_SHORTCUT'
uses-permission: name='android.permission.WRITE_SETTINGS'
uses-permission: name='com.anddoes.launcher.permission.UPDATE_COUNT'
uses-permission: name='android.permission.READ_PROFILE'
uses-permission: name='android.permission.BROADCAST_STICKY'
uses-permission: name='com.aliyun.permission.STORAGE_SERVICE'
uses-permission: name='nxp.permission.ACCESS_WALLET_SERVICE'
uses-permission: name='com.samsung.android.authservice.permission.READ_CONTENT_PROVIDER'
uses-permission: name='android.permission.USE_FINGERPRINT'
uses-permission: name='android.permission.MANAGE_FINGERPRINT'
permission: com.eg.android.AlipayGphone.permission.MIPUSH_RECEIVE
uses-permission: name='com.eg.android.AlipayGphone.permission.MIPUSH_RECEIVE'
uses-permission: name='com.miui.mihome2.permission.READ_SETTINGS'
uses-permission: name='com.miui.mihome2.permission.WRITE_SETTINGS'
uses-permission: name='com.aliyun.homeshell.permission.WRITE_SETTINGS'
uses-permission: name='com.aliyun.homeshell.permission.READ_SETTINGS'
uses-permission: name='com.lenovo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lenovo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.iLoong.permission.WRITE_SETTINGS'
uses-permission: name='com.iLoong.permission.READ_SETTINGS'
uses-permission: name='cn.nubia.launcher.permission.WRITE_SETTINGS'
uses-permission: name='cn.nubia.launcher.permission.READ_SETTINGS'
uses-permission: name='com.smartisanos.launcher.WRITE_DATABASE'
uses-permission: name='com.smartisanos.launcher.READ_DATABASE'
uses-permission: name='com.smartisanos.launcher.data.ExportDataProvider'
uses-permission: name='com.teslacoilsw.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.teslacoilsw.launcher.permission.READ_SETTINGS'
uses-permission: name='com.meizu.flyme.launcher.permission.READ_SETTINGS'
uses-permission: name='com.meizu.flyme.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.ztemt.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.ztemt.launcher.permission.READ_SETTINGS'
uses-permission: name='com.zte.lqsoft.launcher.permission.READ_SETTINGS'
uses-permission: name='com.zte.lqsoft.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.baoruan.launcher2.permission.WRITE_SETTINGS'
uses-permission: name='com.baoruan.launcher2.permission.READ_SETTINGS'
uses-permission: name='com.fineos.launcher.permission.READ_SETTINGS'
uses-permission: name='com.fineos.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.ibingo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.ibingo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.zui.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.zui.launcher.permission.READ_SETTINGS'
uses-permission: name='com.qihoo360.screenlock.permission.READ_LOCAL_THEME'
uses-permission: name='com.qihoo360.screenlock.permission.WRITE_LOCAL_THEME'
uses-permission: name='com.zte.mifavor.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.zte.mifavor.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.android.tpwlauncher2.permission.WRITE_SETTINGS'
uses-permission: name='com.android.tpwlauncher2.permission.READ_SETTINGS'
uses-permission: name='com.android.sprdlauncher1.permission.READ_SETTINGS'
uses-permission: name='com.android.sprdlauncher1.permission.WRITE_SETTINGS'
uses-permission: name='com.s.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.s.launcher.permission.READ_SETTINGS'
uses-permission: name='com.zte.mobile.ZteLauncher3D.permission.READ_SETTINGS'
uses-permission: name='com.zte.mobile.ZteLauncher3D.permission.WRITE_SETTINGS'
uses-permission: name='com.android.launcher23.permission.READ_SETTINGS'
uses-permission: name='com.android.launcher23.permission.WRITE_SETTINGS'
uses-permission: name='com.mgyun.permission.READ_SETTINGS'
uses-permission: name='com.mgyun.permission.WRITE_SETTINGS'
uses-permission: name='com.asus.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.asus.launcher3.permission.WRITE_SETTINGS'
uses-permission: name='com.tsf.shell.permission.READ_SETTINGS'
uses-permission: name='com.tsf.shell.permission.WRITE_SETTINGS'
uses-permission: name='com.tul.aviate.permission.READ_SETTINGS'
uses-permission: name='com.tul.aviate.permission.WRITE_SETTINGS'
uses-permission: name='com.lenovo.launcherhdmarket.permission.READ_SETTINGS'
uses-permission: name='com.lenovo.launcherhdmarket.permission.WRITE_SETTINGS'
uses-permission: name='com.hola.launcher.permission.READ_SETTINGS'
uses-permission: name='com.hola.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.qihoo360.home.permission.WRITE_SETTINGS'
uses-permission: name='com.qihoo360.home.permission.READ_SETTINGS'
uses-permission: name='com.slim.slimlauncher.permission.READ_SETTINGS'
uses-permission: name='com.slim.slimlauncher.permission.WRITE_SETTINGS'
uses-permission: name='com.huaqin.launcherEx.permission.WRITE_SETTINGS'
uses-permission: name='com.huaqin.launcherEx.permission.READ_SETTINGS'
uses-permission: name='com.epic.launcher.tw.permission.WRITE_SETTINGS'
uses-permission: name='com.epic.launcher.tw.permission.READ_SETTINGS'
uses-permission: name='com.android.lewalauncher.permission.READ_SETTINGS'
uses-permission: name='com.android.lewalauncher.permission.WRITE_SETTINGS'
uses-permission: name='com.Dean.launcher.permission.READ_SETTINGS'
uses-permission: name='com.Dean.launcher.permission.WRITE_SETTINGS'
uses-permission: name='app.cobo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='app.cobo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.alphalp.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.alphalp.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lollipop.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lollipop.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.l.launcher.permission.READ_SETTINGS'
uses-permission: name='com.l.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.dlto.atom.launcher.permission.READ_SETTINGS'
uses-permission: name='com.dlto.atom.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.android.sprdlauncher2.permission.WRITE_SETTINGS'
uses-permission: name='com.android.sprdlauncher2.permission.READ_SETTINGS'
uses-permission: name='com.konka.launcher2.permission.READ_SETTINGS'
uses-permission: name='com.konka.launcher2.permission.WRITE_SETTINGS'
uses-permission: name='com.mycheering.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.mycheering.launcher.permission.READ_SETTINGS'
uses-permission: name='com.microsoft.launcher.permission.READ_SETTINGS'
uses-permission: name='com.microsoft.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.nicelauncher.lolauncher.permission.READ_SETTINGS'
uses-permission: name='com.nicelauncher.lolauncher.permission.WRITE_SETTINGS'
uses-permission: name='com.jui.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.jui.launcher3.permission.WRITE_SETTINGS'
uses-permission: name='com.android.launcher2.permission.READ_SETTINGS'
uses-permission: name='com.android.launcher2.permission.WRITE_SETTINGS'
uses-permission: name='com.qihoo360.launcher.permission.READ_SETTINGS'
uses-permission: name='com.qihoo360.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.lge.launcher.permission.READ_SETTINGS'
uses-permission: name='com.lge.launcher.permission.WRITE_SETTINGS'
uses-permission: name='net.qihoo.launcher.permission.READ_SETTINGS'
uses-permission: name='net.qihoo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='org.adw.launcher_donut.permission.READ_SETTINGS'
uses-permission: name='org.adw.launcher_donut.permission.WRITE_SETTINGS'
uses-permission: name='com.huawei.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.huawei.launcher3.permission.WRITE_SETTINGS'
uses-permission: name='com.sec.android.app.twlauncher.settings.READ_SETTINGS'
uses-permission: name='com.sec.android.app.twlauncher.settings.WRITE_SETTINGS'
uses-permission: name='com.anddoes.launcher.permission.READ_SETTINGS'
uses-permission: name='com.anddoes.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.tencent.qqlauncher.permission.READ_SETTINGS'
uses-permission: name='com.tencent.qqlauncher.permission.WRITE_SETTINGS'
uses-permission: name='com.huawei.launcher2.permission.READ_SETTINGS'
uses-permission: name='com.huawei.launcher2.permission.WRITE_SETTINGS'
uses-permission: name='com.ebproductions.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.ebproductions.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='telecom.mdesk.permission.READ_SETTINGS'
uses-permission: name='telecom.mdesk.permission.WRITE_SETTINGS'
uses-permission: name='dianxin.permission.ACCESS_LAUNCHER_DATA'
uses-permission: name='com.modaco.android.launchergb.permission.READ_SETTINGS'
uses-permission: name='com.modaco.android.launchergb.permission.WRITE_SETTINGS'
uses-permission: name='com.sec.android.app.launcher.permission.READ_SETTINGS'
uses-permission: name='com.sec.android.app.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.bbk.launcher2.permission.READ_SETTINGS'
uses-permission: name='com.bbk.launcher2.permission.WRITE_SETTINGS'
uses-permission: name='com.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.htc.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.sec.android.app.twlauncher.WRITE_SETTINGS'
uses-permission: name='com.sec.android.app.twlauncher.READ_SETTINGS'
uses-permission: name='org.adw.launcher.permission.READ_SETTINGS'
uses-permission: name='org.adw.launcher.permission.WRITE_SETTINGS'
uses-permission: name='org.adwfreak.launcher.permission.READ_SETTINGS'
uses-permission: name='org.adwfreak.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.gau.go.launcherex.permission.READ_SETTINGS'
uses-permission: name='com.gau.go.launcherex.permission.WRITE_SETTINGS'
uses-permission: name='com.fede.launcher.permission.READ_SETTINGS'
uses-permission: name='com.fede.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.nd.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.nd.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.android.mylauncher.permission.READ_SETTINGS'
uses-permission: name='com.android.mylauncher.permission.WRITE_SETTINGS'
uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.huawei.launcher.permission.READ_SETTINGS'
uses-permission: name='com.huawei.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.mx.launcher.permission.READ_SETTINGS'
uses-permission: name='com.mx.launcher.permission.WRITE_SETTINGS'
uses-permission: name='com.android.launcher3.permission.READ_SETTINGS'
uses-permission: name='com.android.launcher3.permission.WRITE_SETTINGS'
uses-permission: name='com.google.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.google.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='android.permission.MOUNT_UNMOUNT_FILESYSTEMS'
uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'
3. Github搜索技巧
- 搜索時星星數(shù)量越多越好
- 對應作者的其他項目的反饋情況有參考價值
- 看issues一欄里面已關閉和未關閉的問題
- 翻開庫直接看源碼查質量
4.AndroidStudio主題設置和字體設置
4.1、設置主題色
Darcula主題是背景色為黑色的主題
Default默認的主題是背景色為白色的主題
設置方法:Android Studio -- Preferences -- Appearance&Behavior -- Appearance -- UI Options --Theme
4.2、字體大小設置
Android Studio -- Preferences -- Editor -- ColorScheme -- ColorSchemeFont -- size