AndroidのSplash起動図の2つの動的な切り替えを詳細に説明する。

3473 ワード

寒いスタートの時はネットの原因を考慮して、デフォルトでローカル画像を表示します。
熱起動時は、取得した起動図が新しい動きかどうかによって置き換えられます。
以下は動的な置換を実現する2つの方法である。
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はok httpでInterceptorブロックを統一しています。ダウンロード画像を使っていますので、単独で提出します。
  • はserviceを作成し、プロファイルAndroid Manifest.xmlに
  • を登録する。
  • は、画像アドレスを取得した後、startService()をserviceに伝達する。
  • serviceのワンストップCommand()で画像アドレスを取得し、ImgServiseを作成して
  • をダウンロードし始めました。
    ダウンロードコードは以下の通りです。
    
      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();
            }
          });
    
    取得した画像の名前を変更して表示します。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。