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

来源:互联网 发布:v字仇杀队v是谁知乎 编辑:程序博客网 时间:2024/06/04 01:17

一般来说,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 0
原创粉丝点击