android 如何在service中定时请求网络

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

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

   public static final String TAG = "TokenService";
    private static boolean control = false;
    private TokenBean mTokenBean;
    private AlarmManager mManager;
    private PendingIntent mPi;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: ");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String s = SPUtils.get(UIUtils.getContext(), "RefreshToken", "") + "";
        long lo = (long) SPUtils.get(UIUtils.getContext(), "ExpiredToken", UtilsConstant.DSE);//根据实际来 我这是根据自己服务器时间进行的
        mManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        long triggerAtTime = SystemClock.elapsedRealtime() + lo;//每隔多久请求一次 lo是时间 单位毫秒
        Log.e(TAG, "onStartCommand: " + triggerAtTime);
        Intent i = new Intent(this, AlarmssReceiver.class);//开启广播
        mPi = PendingIntent.getBroadcast(this, 0, i, 0);
        mManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, mPi);//启动
        //判断是否第一次进来,一般来说用户登录就直接开启服务 判断是第一次登录就不用请求
        if (!control) {
            control = true;
            Log.e(TAG, "第一次进来");
        } else {
            Log.e(TAG, "第二次进来");
            Log.e(TAG, "onStartCommand: 开始请求网络获取Token" + s);
            Log.e(TAG, "隔多久请求" + lo);
            if (!TextUtils.isEmpty(s)) {
                //这里放请求网络的逻辑 可以先打个log看看
            } else {
                Toast.makeText(getApplicationContext(), "你好请重新登录", Toast.LENGTH_SHORT).show();
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: 关闭广播注册者");
        mManager.cancel(mPi);//关闭的服务的时候同时关闭广播注册者
        super.onDestroy();
    }

这里写一个广播,用来定时刷新一下服务

public class AlarmssReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        UIUtils.startTokenService();//可以把开启跟关闭服务的逻辑封装一下,直接调用
//        Intent i = new Intent(context, TokenService.class);
//        //启动服务
//        context.startService(i);
    }
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值