成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一種提高Android應(yīng)用進(jìn)程存活率新方法(下)

移動開發(fā) Android
Android系統(tǒng)內(nèi)存不足時,系統(tǒng)會殺掉一部分進(jìn)程以釋放空間,誰生誰死的這個生死大權(quán)就是由LMK所決定的,這就是Android系統(tǒng)中的Low Memory Killer,其基于Linux的OOM機(jī)制,其閾值定義如下面所示的lowmemorykiller文件中,當(dāng)然也可以通過系統(tǒng)的init.rc實現(xiàn)自定義。

[[179903]]

接上文

  • 創(chuàng)建Account服務(wù)
  1. public class XXAuthService extends Service { 
  2.     private XXAuthenticator mAuthenticator; 
  3.   
  4.     @Override 
  5.     public void onCreate() { 
  6.         mAuthenticator = new XXAuthenticator(this); 
  7.     } 
  8.   
  9.     private XXAuthenticator getAuthenticator() { 
  10.         if (mAuthenticator == null
  11.             mAuthenticator = new XXAuthenticator(this); 
  12.         return mAuthenticator; 
  13.     } 
  14.   
  15.     @Override 
  16.     public IBinder onBind(Intent intent) { 
  17.         return getAuthenticator().getIBinder(); 
  18.     } 
  19.   
  20.     class XXAuthenticator extends AbstractAccountAuthenticator { 
  21.         private final Context context; 
  22.         private AccountManager accountManager; 
  23.         public XXAuthenticator(Context context) { 
  24.             super(context); 
  25.             this.context = context; 
  26.             accountManager = AccountManager.get(context); 
  27.         } 
  28.   
  29.         @Override 
  30.         public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) 
  31.                 throws NetworkErrorException { 
  32. // 添加賬號 示例代碼 
  33.             final Bundle bundle = new Bundle(); 
  34.             final Intent intent = new Intent(context, AuthActivity.class); 
  35.             intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); 
  36.             bundle.putParcelable(AccountManager.KEY_INTENT, intent); 
  37.             return bundle; 
  38.         } 
  39.   
  40.         @Override 
  41.         public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) 
  42.                 throws NetworkErrorException { 
  43. // 認(rèn)證 示例代碼 
  44.             String authToken = accountManager.peekAuthToken(account, getString(R.string.account_token_type)); 
  45.             //if not, might be expired, register again 
  46.             if (TextUtils.isEmpty(authToken)) { 
  47.                 final String password = accountManager.getPassword(account); 
  48.                 if (password != null) { 
  49.                     //get new token 
  50. authToken = account.name + password
  51.                 } 
  52.             } 
  53.             //without password, need to sign again 
  54.             final Bundle bundle = new Bundle(); 
  55.             if (!TextUtils.isEmpty(authToken)) { 
  56.                 bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 
  57.                 bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 
  58.                 bundle.putString(AccountManager.KEY_AUTHTOKEN, authToken); 
  59.                 return bundle; 
  60.             } 
  61.   
  62.             //no account data at all, need to do a sign 
  63.             final Intent intent = new Intent(context, AuthActivity.class); 
  64.             intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); 
  65.             intent.putExtra(AuthActivity.ARG_ACCOUNT_NAME, account.name); 
  66.             bundle.putParcelable(AccountManager.KEY_INTENT, intent); 
  67.             return bundle; 
  68.         } 
  69.   
  70.         @Override 
  71.         public String getAuthTokenLabel(String authTokenType) { 
  72. //            throw new UnsupportedOperationException(); 
  73.             return null
  74.         } 
  75.   
  76.         @Override 
  77.         public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { 
  78.             return null
  79.         } 
  80.   
  81.         @Override 
  82.         public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) 
  83.                 throws NetworkErrorException { 
  84.             return null
  85.         } 
  86.   
  87.         @Override 
  88.         public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) 
  89.                 throws NetworkErrorException { 
  90.             return null
  91.         } 
  92.   
  93.         @Override 
  94.         public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) 
  95.                 throws NetworkErrorException { 
  96.             return null
  97.         } 
  98.     } 

 

  • 聲明Account服務(wù)
  1. <service 
  2. android:name="**.XXAuthService" 
  3. android:exported="true" 
  4. android:process=":core"
  5. <intent-filter> 
  6. <action 
  7. android:name="android.accounts.AccountAuthenticator"/> 
  8. </intent-filter> 
  9. <meta-data 
  10. android:name="android.accounts.AccountAuthenticator" 
  11. android:resource="@xml/authenticator"/> 
  12. </service> 

 

其中authenticator為:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:accountType="@string/account_auth_type" 
  4.     android:icon="@drawable/icon" 
  5.     android:smallIcon="@drawable/icon" 
  6.     android:label="@string/app_name" 
  7. /> 

 

  • 使用Account服務(wù)

同SyncAdapter,通過AccountManager使用

。申請Token主要是通過 AccountManager.getAuthToken)系列方法

。添加賬號則通過 AccountManager.addAccount)

。查看是否存在賬號通過 AccountManager.getAccountsByType)

Refs

  • 微信Android客戶端后臺保活經(jīng)驗分享
  • Android Low Memory Killer原理
  • stackOverflow 上介紹的雙Service方法
  • Write your own Android Sync Adapter
  • Write your own Android Authenticator
  • Android developer
    • android.accounts
    • AccountManager
    • AbstractAccountAuthenticator
    • AccountAuthenticatorActivity
    • Creating a Sync Adapter
  • Android篇從底層實現(xiàn)讓進(jìn)程不被殺死(失效Closed)
  • Android 4.3+ NotificationListenerService 的使用
  • Going multiprocess on Android
責(zé)任編輯:龐桂玉 來源: 安卓開發(fā)精選
相關(guān)推薦

2016-12-26 18:25:29

Android應(yīng)用進(jìn)程存活率

2022-04-20 08:00:00

深度學(xué)習(xí)數(shù)據(jù)集Hub

2022-11-22 11:18:38

Java虛擬線程

2022-03-10 12:16:14

側(cè)信道內(nèi)存攻擊網(wǎng)絡(luò)攻擊

2021-02-18 18:13:34

LinuxARM樹莓派

2018-10-07 07:00:59

2023-08-08 11:28:06

企業(yè)首席執(zhí)行官

2021-09-26 10:49:27

計算機(jī)互聯(lián)網(wǎng) 技術(shù)

2021-09-27 10:12:42

欺騙防御rMTD網(wǎng)絡(luò)攻擊

2024-11-05 08:19:11

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)

2019-11-23 23:18:20

物聯(lián)網(wǎng)存活率企業(yè)

2010-04-01 09:30:57

2015-08-21 09:14:40

大數(shù)據(jù)

2022-05-26 10:57:51

機(jī)器人人工智能

2019-07-12 13:50:36

物聯(lián)網(wǎng)大數(shù)據(jù)安全

2022-07-07 10:47:16

IngressKubernetes

2021-02-18 14:55:06

FuchsiaAndroidLinux

2024-04-08 12:18:57

訓(xùn)練AI

2024-01-23 17:33:36

2009-07-31 08:56:59

ASP.NET頁面刷新
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜寂寞福利视频 | 一区二区视频 | 日韩欧美在线观看视频 | 久久久久国产 | 日本亚洲欧美 | 九色视频网站 | 黄色一级免费 | 日韩精品一区二区久久 | 国产一区黄色 | 国产精品无码永久免费888 | 成人a在线观看 | 国产不卡在线 | 在线观看特色大片免费网站 | 日本中文字幕视频 | a级毛片毛片免费观看久潮喷 | 欧美久久精品一级黑人c片 91免费在线视频 | 午夜免费| 国产一区二区影院 | 成人精品一区 | 欧美不卡网站 | 国产视频久久久 | 日韩视频中文字幕 | 2019天天干夜夜操 | 99亚洲 | 日韩在线播放第一页 | 天堂av资源 | 亚洲风情在线观看 | 国产乱码久久久久久一区二区 | 男人的天堂久久 | 狠狠色香婷婷久久亚洲精品 | 老司机精品福利视频 | 国产aaaaav久久久一区二区 | 欧美日韩精品影院 | 欧日韩不卡在线视频 | 另类一区| 男插女下体视频 | 国产日韩91 | 日韩不卡一区二区三区 | 亚洲第一免费播放区 | 欧美精品福利 | 麻豆91精品91久久久 |