冷啟動的時候因為要考慮網路原因,默認顯示一張本地圖片。
熱啟動的時候會根據獲取的啟動圖是否是新動態替換。
以下是實現動態替換的兩種方式:
Glide的緩存下載
Glide中的downloadOnly方法可實現圖片的下載功能
圖片下載
Observable.just(RetrofitHelper.API_BASE_URL + img) .subscribeOn(Schedulers.newThread()) .subscribe(new Action1<String>() { @Override public void call(String s) { try { Glide.with(getApplicationContext()) .load(s) .downloadOnly(720, 1280) .get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } });每次啟動的時候去獲取
File file = new File(sp_splash_logo); if (file.exists()) { Glide.with(getApplicationContext()).load(file).into(mIvSplash); } else { mIvSplash.setImageResource(R.mipmap.splash); }Retofit+RxJava的本地下載
考慮到項目中用到的client是okhttp并統一了Interceptor攔截器,在用到下載圖片,所以就單獨提出來了。
下載的代碼如下
Retrofit retrofit = new Retrofit.Builder() .baseUrl(RetrofitHelper.API_BASE_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ImgServise imgServise = retrofit.create(ImgServise.class); imgServise.downloadPicFromNet(img) .subscribeOn(Schedulers.newThread()) .subscribe(new Action1<ResponseBody>() { @Override public void call(ResponseBody responseBody) { try { long contentLength = responseBody.contentLength(); InputStream is = responseBody.byteStream(); File file = new File(Environment.getExternalStorageDirectory(), BuildConfig.APPLICATION_ID + "splash.png"); FileOutputStream fos = new FileOutputStream(file); BufferedInputStream bis = new BufferedInputStream(is); byte[] buffer = new byte[1024]; int len; long sum = 0L; while ((len = bis.read(buffer)) != -1) { fos.write(buffer, 0, len); sum += len; fos.flush(); //增加下載進度的獲取 Log.d("TAG---", sum + "/" + contentLength); } fos.close(); bis.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } finally { stopSelf(); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { stopSelf(); } });獲取到的圖片重新命名再進行顯示。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答