Android在Service中定时请求网络

一般来说,android的一些耗时的操作很多都会丢给后台服务来做,而一些公司因为安全原因,再每次请求的网络的时候请求头会隔一段时间变化一次,但是也不能每次请求网络都去拿一次请求头,所以这个时候在service后台定时请求网络获取最新的请求头然后储存起来是很有必要的,

下面直接贴代码,记录一下

  1. public static final String TAG = "TokenService";
  2. private static boolean control = false;
  3. private TokenBean mTokenBean;
  4. private AlarmManager mManager;
  5. private PendingIntent mPi;
  6. @Nullable
  7. @Override
  8. public IBinder onBind(Intent intent) {
  9. return null;
  10. }
  11. @Override
  12. public void onCreate() {
  13. Log.e(TAG, "onCreate: ");
  14. super.onCreate();
  15. }
  16. @Override
  17. public int onStartCommand(Intent intent, int flags, int startId) {
  18. String s = SPUtils.get(UIUtils.getContext(), "RefreshToken", "") + "";
  19. long lo = ( long) SPUtils.get(UIUtils.getContext(), "ExpiredToken", UtilsConstant.DSE); //根据实际来 我这是根据自己服务器时间进行的
  20. mManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  21. long triggerAtTime = SystemClock.elapsedRealtime() + lo; //每隔多久请求一次 lo是时间 单位毫秒
  22. Log.e(TAG, "onStartCommand: " + triggerAtTime);
  23. Intent i = new Intent( this, AlarmssReceiver.class); //开启广播
  24. mPi = PendingIntent.getBroadcast( this, 0, i, 0);
  25. mManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi); //启动
  26. //判断是否第一次进来,一般来说用户登录就直接开启服务 判断是第一次登录就不用请求
  27. if (!control) {
  28. control = true;
  29. Log.e(TAG, "第一次进来");
  30. } else {
  31. Log.e(TAG, "第二次进来");
  32. Log.e(TAG, "onStartCommand: 开始请求网络获取Token" + s);
  33. Log.e(TAG, "隔多久请求" + lo);
  34. if (!TextUtils.isEmpty(s)) {
  35. //这里放请求网络的逻辑 可以先打个log看看
  36. } else {
  37. Toast.makeText(getApplicationContext(), "你好请重新登录", Toast.LENGTH_SHORT).show();
  38. }
  39. }
  40. return super.onStartCommand(intent, flags, startId);
  41. }
  42. @Override
  43. public void onDestroy() {
  44. Log.e(TAG, "onDestroy: 关闭广播注册者");
  45. mManager.cancel(mPi); //关闭的服务的时候同时关闭广播注册者
  46. super.onDestroy();
  47. }

这里写一个广播,用来定时刷新一下服务
  1. public class AlarmssReceiver extends BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. Intent i = new Intent(context, TokenService.class);
  5. //启动服务
  6. context.startService(i);
  7. }
  8. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值