망치형이나 가지형 휴대폰의 지속적인 등장에도 불구하고, 안드로이드 시스템은 여전히 휴대폰 시장 점유율 1위를 차지하고 있기 때문에 안드로이드를 기반으로 개발된 앱의 수도 매우 많습니다. 그렇다면 고성능 Android 앱을 어떻게 개발할 수 있을까요? 나는 이것이 소프트웨어 개발 회사와 프로그래머에게 큰 골칫거리라고 생각합니다. 오늘은 안드로이드 앱의 성능을 향상시키기 위한 몇 가지 팁을 알려드리겠습니다.
스레드를 효율적으로 사용하기
1. 백그라운드에서 일부 스레드의 작업 취소
앱 실행 중 모든 작업이 메인 스레드(UI 스레드)에서 수행된다는 것을 알고 있습니다 ) 기본적으로 이러한 방식으로 앱의 응답 속도에 영향을 미칩니다. 프로그램이 멈추거나 죽거나 시스템 오류가 발생할 수도 있습니다. 응답 시간을 단축하려면 시간이 많이 걸리는 작업(예: 네트워크 요청, 데이터베이스 작업 또는 복잡한 계산)을 기본 스레드에서 별도의 스레드로 이동해야 합니다. 가장 효율적인 방법은 클래스 수준에서 이 작업을 완료하는 것입니다. AsyncTask 또는 IntentService를 사용하여 백그라운드 작업을 만들 수 있습니다. IntentService를 사용하기로 선택한 경우 필요할 때 시작된 다음 작업자 스레드를 통해 요청(인텐트)을 처리합니다.
IntentService 사용 시 다음 제한 사항에 주의해야 합니다.
1. 이 클래스는 처리 결과 정보를 사용자에게 표시하려는 경우, 활동을 사용하세요.
2. 한 번에 하나의 요청만 처리할 수 있습니다.
3. 각 요청 처리 프로세스는 중단될 수 없습니다.
2. UI 스레드의 ANR
시간이 많이 걸리는 작업을 제거하면 사용자 작업으로 인해 ANR(시스템 응답 없음) 대화 상자가 발생하는 것을 방지할 수도 있습니다. 당신이 해야 할 일은 AsyncTask를 상속하여 백그라운드 작업자 스레드를 만들고 doInBackground() 메서드를 구현하는 것뿐입니다.
또 다른 방법은 Thread 클래스나 HandlerThread 클래스를 직접 만드는 것입니다. 스레드의 우선순위를 명시적으로 설정하지 않는 한 기본 스레드 우선순위는 기본 스레드의 우선순위와 동일하기 때문에 앱 속도도 느려집니다.
3. 스레드에서 쿼리 작업 초기화
쿼리 작업이 백그라운드에서 처리되는 경우 표시되는 데이터는 실시간이 아니지만 CursorLoader 개체를 사용하면 속도를 높일 수 있습니다. 이 작업을 수행하면 사용자와의 활동 상호 작용이 영향을 받지 않게 됩니다.
이 개체를 사용한 후 앱은 쿼리할 ContentProvider에 대한 독립적인 백그라운드 스레드를 초기화합니다. 쿼리가 완료되면 쿼리를 호출한 활동에 결과가 반환됩니다.
4. 주의가 필요한 기타 측면
StrictMode를 사용하여 UI 스레드에서 시간이 많이 걸릴 수 있는 작업을 확인하세요.
Safe.ijiami와 같은 특수 도구를 사용하세요. 애플리케이션에서 병목 현상을 찾으려면 Systrace 또는 Traceview를 사용하세요.
진행률 표시줄을 사용하여 사용자에게 작업 진행 상황을 표시하세요.
초기화 작업에 시간이 오래 걸리는 경우 환영 인터페이스를 표시하세요. .
기기 배터리 수명 최적화
배터리 수명이 소모된다면 앱을 제거한 것에 대해 사용자를 비난하지 마세요. 배터리 사용량과 관련하여 주요 전력 소비는 다음과 같습니다.
데이터를 업데이트할 때 프로그램을 자주 깨우세요.
데이터를 전송하려면 EDGE 또는 3G를 사용하세요.
텍스트 데이터를 변환하세요. JIT가 아닌 정규식 작업의 경우.
5. 네트워크 최적화
네트워크 연결이 없으면 네트워크 연결이 있고 로밍이 없을 때만 애플리케이션이 네트워크 작업을 건너뛰도록 하세요.
호환되는 데이터 형식을 선택하고 텍스트 데이터 및 바이너리 데이터가 포함된 모든 요청을 바이너리 데이터 형식 요청으로 변환합니다.
효율적인 변환 도구를 사용하고 트리 모양 변환 도구를 점점 더 적게 사용하는 것을 고려하세요.
더 빠른 사용자 경험을 위해 서버에 대한 반복 액세스를 줄여주세요. 가능하다면 프레임워크의 GZIP 라이브러리를 사용하여 텍스트 데이터를 압축하여 CPU 리소스를 효율적으로 사용하시기 바랍니다. 6. 프런트 엔드에서 애플리케이션 작업을 최적화하세요wakelock 사용을 고려하는 경우 잠재적인 위험을 방지하려면 가장 작은 수준으로 설정하세요. 버그로 인해 전력 소비가 발생하지 않도록 명확히 하세요. android:keepScreenOn 속성을 활성화하세요. 시스템 GC 작업 외에도 XmlPullParserFactory 및 비트맵팩토리. 정규 표현식 Matcher.reset(newString) 작업과 StringBuilder.setLength(0) 작업도 있습니다. 는 메인 스레드에서는 안전하지만 동기화 문제에 주의해야 합니다. Listview에서 더 많은 재사용 전략을 사용하세요. 허용되는 경우 GPS 대신 대략적인 네트워크 위치 지정을 사용하세요. 이에 비해 GPS에는 1mAh(25s * 140mA)가 필요하지만 일반 네트워크에서는 0.1mAh(2s * 180mA)만 사용합니다. ; 이 업데이트 작업은 onPause()에서도 계속되므로 GPS 위치 업데이트 작업에서 반드시 로그아웃하세요. 모든 애플리케이션이 이 작업에서 로그아웃되면 사용자는 배터리 낭비 없이 시스템 설정에서 GPS를 다시 활성화할 수 있습니다. DPI 작업에 DisplayMetrics를 사용할 때 무거운 수학 연산 및 캐싱에서는 정밀도가 낮은 변수를 사용하는 것을 고려하십시오. 변수 값 7. 포그라운드에서 작동하는 애플리케이션 최적화 각 프로세스에는 2MB의 메모리가 필요하고 포그라운드 프로그램에는 메모리가 필요하므로 서비스 수명 주기가 짧은지 확인하세요. 또한 다시 시작됩니다. 메모리 사용량을 너무 많이 유지하지 마세요. 애플리케이션을 30분마다 업데이트하려면 기기가 활성화된 상태에서 업데이트하세요.서비스가 pull 상태이거나 sleep 상태인 것은 좋지 않기 때문에 서비스가 종료되면 AlarmManager 또는 구성 속성 stopSelf()를 사용해야 합니다.
8. 기타 주의사항
전체 업데이트를 수행하기 전에 배터리 상태와 네트워크 상태를 확인하고, 대규모 교체 작업을 수행하기 전에 최상의 상태를 기다리십시오.
사용자가 업데이트 주기, 백그라운드 작업 등의 전력 사용량을 확인할 수 있도록 합니다.
메모리 사용량이 적은 UI 구현
9. 레이아웃 표시 문제 찾기
레이아웃을 분리할 때 UI를 생성하면 메모리를 남용하고 UI에 심각한 지연을 일으키는 앱을 생성하게 됩니다. 원활하고 메모리가 적은 UI를 구현하는 첫 번째 단계는 애플리케이션에서 잠재적인 병목 현상이 발생할 수 있는 레이아웃을 검색하는 것입니다. Android SDK/tools/와 함께 제공되는 Safe.ijiami 및 Hierarchy Viewer Tool 도구를 사용하세요.
또 다른 좋은 도구는 Lint로, 애플리케이션의 소스 코드를 스캔하여 가능한 버그를 찾고 제어 결과를 최적화합니다.
10. 문제 해결
레이아웃 표시 결과에 문제가 발견되면 레이아웃 구조를 단순화하는 것을 고려할 수 있습니다. LinearLayout 유형을 RelativeLayout 유형으로 변환하여 레이아웃 계층 구조를 줄일 수 있습니다.
위의 각 팁이 여러분의 일상 코드의 일부가 되기를 바라며, 그러면 예상치 못한 결과가 나타날 것입니다. Google Play에서 더욱 우수하고, 원활하고, 빠르고, 절전적인 애플리케이션을 볼 수 있게 하여 Android 완벽이라는 목표에 한 걸음 더 다가가세요.