Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

연결 유형에 따른 다운로드 패턴 수정

모든 연결 유형이 배터리 수명에 동일한 영향을 미치는 것은 아닙니다. Wi-Fi 무선 통신은 다른 무선 통신보다 배터리를 훨씬 적게 사용할 뿐만 아니라 다른 무선 통신 기술에서 사용되는 무선 통신이 배터리에 주는 영향도 다릅니다.

Wi-Fi 사용

대부분의 경우 Wi-Fi 무선 통신은 훨씬 낮은 배터리 비용으로 더 큰 대역폭을 제공합니다. 따라서 가능하면 Wi-Fi가 연결되어 있을 때 데이터를 전송해야 합니다.

연결 상태 및 연결 유형 확인에서 설명한 대로 broadcast receiver를 사용하면 Wi-Fi가 연결되어 중요한 다운로드를 실행하고 예약된 업데이트를 선점하며 정기 업데이트 빈도를 잠재적으로 일시 증가시킨 때를 나타내는 연결 변경사항을 수신 대기할 수 있습니다.

많은 데이터를 낮은 빈도로 다운로드하기 위해 큰 대역폭 사용

무선 통신을 연결하는 경우 일반적으로 더 높은 대역폭을 사용하면 더 큰 배터리 비용이 듭니다. 일반적으로 LTE는 3G보다 더 많은 에너지를 소비하고 3G는 2G보다 더 큰 비용이 듭니다.

즉, 기반 무선 통신 상태 시스템은 무선 통신 기술에 따라 달라지는 반면 일반적으로 상태 변경 테일-타임에 따른 배터리 영향은 더 높은 대역폭의 무선 통신에서 더 큽니다.

동시에 대역폭이 높다는 것은 더 많은 데이터를 미리 가져와서 같은 시간 동안 더 많이 다운로드할 수 있음을 의미합니다. 또한 직관적이지는 않지만, 테일-타임 배터리 비용이 상대적으로 높기 때문에 업데이트 빈도를 줄이기 위해 각 전송 세션 동안 무선 통신을 더 장시간 활성 상태로 유지하는 것이 더 효율적입니다.

예를 들어, LTE 무선 통신이 3G보다 대역폭과 에너지 비용이 두 배라면 각 세션 동안 네 배의 데이터 또는 10MB 정도의 데이터를 다운로드해야 합니다. 이렇게 많은 양의 데이터를 다운로드할 때, 데이터를 미리 가져오는 것이 사용 가능한 로컬 저장소에 미치는 영향을 고려하는 것과 미리 가져오기용 캐시를 정기적으로 플러시하는 것이 중요합니다.

연결 관리자를 사용하여 활성 상태의 무선 통신을 확인하고 그에 따라 미리 가져오기 루틴을 수정할 수 있습니다.

Kotlin

    val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo

    val prefetchCacheSize: Int = when (activeNetwork?.type) {
        ConnectivityManager.TYPE_WIFI -> MAX_PREFETCH_CACHE
        ConnectivityManager.TYPE_MOBILE -> {
            when (tm.networkType) {
                TelephonyManager.NETWORK_TYPE_LTE or TelephonyManager.NETWORK_TYPE_HSPAP ->
                    DEFAULT_PREFETCH_CACHE * 4
                TelephonyManager.NETWORK_TYPE_EDGE or TelephonyManager.NETWORK_TYPE_GPRS ->
                    DEFAULT_PREFETCH_CACHE / 2
                else -> DEFAULT_PREFETCH_CACHE
            }
        }
        else -> DEFAULT_PREFETCH_CACHE
    }
    

자바

    ConnectivityManager cm =
     (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

    TelephonyManager tm =
      (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE;

    switch (activeNetwork.getType()) {
      case (ConnectivityManager.TYPE_WIFI):
        PrefetchCacheSize = MAX_PREFETCH_CACHE; break;
      case (ConnectivityManager.TYPE_MOBILE): {
        switch (tm.getNetworkType()) {
          case (TelephonyManager.NETWORK_TYPE_LTE |
                TelephonyManager.NETWORK_TYPE_HSPAP):
            PrefetchCacheSize *= 4;
            break;
          case (TelephonyManager.NETWORK_TYPE_EDGE |
                TelephonyManager.NETWORK_TYPE_GPRS):
            PrefetchCacheSize /= 2;
            break;
          default: break;
        }
        break;
      }
      default: break;
    }