Android 는 IntentService 를 사용 하여 apk 업데이트 예제 코드 를 진행 합 니 다.

보통 service 업데이트 애플 리 케 이 션 을 사용 할 때 가장 자주 발생 하 는 문 제 는 Notification 진도 의 업데이트 문제,service 가 언제 닫 히 는 지,그리고 우리 자신 이 Service 에서 새로운 스 레 드 를 만 드 는 데 시간 이 걸 리 는 작업 입 니 다.물론 이것 도 실현 할 수 있 지만 약간 번 거 로 워 보일 수 있 습 니 다.
비 교 를 통 해 알 수 있 듯 이 IntentService 를 사용 하여 시간 소모 작업 에 대한 포장 을 실 현 했 습 니 다.저 희 는 IntentService 중의 onHandleIntent 방법 만 실현 하면 그 중에서 시간 소모 작업 을 처리 할 수 있 습 니 다.다운로드 문 제 를 처리 할 때 intentservice 를 사용 할 때 우아 하 게 진 도 를 바 꿀 수 있 는 실현 방법 을 발견 하지 못 했 습 니 다.그래서 저 는 현지 방송 형식 으로 진도 갱신 을 했 습 니 다.
현재 상태 판단 을 추 가 했 습 니 다.프론트 상태 에 있 을 때 직접 설치 합 니 다.백 스테이지 에 있 을 때 알림 팝 업 창 을 클릭 하여 설치 합 니 다.예제 는 다음 과 같 습 니 다.

먼저 라디오 를 만들다

public static class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      switch (intent.getAction()) {
        case ACTION_TYPE_PREPARE:
          if (downloadCallback != null) {
            downloadCallback.onPrepare();
          }
          break;
        case ACTION_TYPE_PROGRESS:
          int progress = intent.getIntExtra("progress", 0);
//          Log.d("progress", "|- " + progress + " -|");
          if (downloadCallback != null) {
            downloadCallback.onProgress(progress);
          }
          break;
        case ACTION_TYPE_COMPLETE:
          String file_path = intent.getStringExtra("file_path");
          if (!TextUtils.isEmpty(file_path)) {
            File file = new File(file_path);
            if (file.exists()) {
              if (downloadCallback != null) {
                downloadCallback.onComplete(file);
              }
            }
          }
          break;
        case ACTION_TYPE_FAIL:
          String error = intent.getStringExtra("error");
          if (downloadCallback != null) {
            downloadCallback.onFail(error + "");
          }
          break;
      }
    }
그리고 IntentService 에서 로 컬 방송 을 초기 화하 고 메 시 지 를 보 냅 니 다.

@Override
  public void onCreate() {
    super.onCreate();
    mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
  }
  
  //               
  private void progress(int progress) {
    Intent intent = new Intent(FileDownloaderManager.ACTION_TYPE_PROGRESS);
    intent.putExtra("progress", progress);
    mLocalBroadcastManager.sendBroadcast(intent);
  }
  
  private void downApk(String url) {
  .....
  .....
   progress(progress);
  .....
  .....
  }
activity 에서 사용

mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_TYPE_PREPARE);
intentFilter.addAction(ACTION_TYPE_PROGRESS);
intentFilter.addAction(ACTION_TYPE_COMPLETE);
intentFilter.addAction(ACTION_TYPE_FAIL);
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
// ondestory   
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
상기 소스 코드 는 이미 포장 되 었 으 므 로 구체 적 인 조작 절 차 를 다음 과 같이 사용 할 수 있 습 니 다.
|-초기 화 및 등록 리 셋

//          
FileDownloaderManager.init(context)
//         ,       
FileDownloaderManager.registerDownload(object : FileDownloaderManager.DownloadCallback {
      override fun onComplete(file: File) = mainView.downloadSucc(file)

      override fun onFail(msg: String?) = Unit

      override fun onProgress(progress: Int) = mainView.onProgress(progress)

      override fun onPrepare() = Unit

    })
//    
FileDownloaderManager.download(url)

|-다운로드 완료 후 자원 초기 화

FileDownloaderManager.unbinder()
원본 주소:원본 주소 
문서 주소:문서 주소
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기