一种提高Android应用进程存活率新方法(下)

接上文

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比永川网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式永川网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖永川地区。费用合理售后完善,十载实体公司更值得信赖。

  • 创建Account服务
 
 
 
  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. // 认证 示例代码 
  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服务
 
 
 
  1. Android:name="**.XXAuthService" 
  2. android:exported="true" 
  3. android:process=":core"> 
  4.  
  5. android:name="android.accounts.AccountAuthenticator"/> 
  6.  
  7. android:name="android.accounts.AccountAuthenticator" 
  8. android:resource="@xml/authenticator"/> 
  9.  

 

其中authenticator为:

 
 
 
  1.  
  2.     android:accountType="@string/account_auth_type" 
  3.     android:icon="@drawable/icon" 
  4.     android:smallIcon="@drawable/icon" 
  5.     android:label="@string/app_name" 
  6. /> 

 

  • 使用Account服务

同SyncAdapter,通过AccountManager使用

。申请Token主要是通过 AccountManager.getAuthToken)系列方法

。添加账号则通过 AccountManager.addAccount)

。查看是否存在账号通过 AccountManager.getAccountsByType)

Refs

  • 微信Android客户端后台保活经验分享
  • 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篇从底层实现让进程不被杀死(失效Closed)
  • Android 4.3+ NotificationListenerService 的使用
  • Going multiprocess on Android

网页名称:一种提高Android应用进程存活率新方法(下)
网页地址:http://www.gawzjz.com/qtweb2/news14/16264.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联