마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메인 Thread의 CPU점유율에 따라 백그라운드 Thread의 CPU점유율을 유동적으로 변화시키게 할 수는 없을까요?

0 추천
앱의 다른 부분들은 정상적으로 작동 하면서 동시에 필요할때 마다 백그라운드로 로딩을 해주는 방식으로 앱을 만들고 있습니다.

근데 백그라운드에서 많은 연산 처리를 하는 상황에선 앱의 애니메이션이 재생될때 버벅이는 문제가 생기더군요.

현재 기기의 CPU/Memory점유율을 가져오는 방법은 있지만 거기서 백그라운드 Thread에 유동적으로 점유율을 할당하는 부분에서 막히는군요.. 점유율에 따라 sleep문의 값을 바꾸는건 상대적인 해결책일 뿐일테고 말이죠..

최적화 작업을 아무리 열심히 해놔도 연산량이 많을땐 구형 기기들에서 버벅이게 되는 문제를 피할수는 없겠죠ㅠ

몇주동안 열심히 궁리해보고 사이트들을 찾아봐도 뾰족한 방법이 나타나질 않아서 질문 올려봅니다 ㅠㅠ
zent (1,360 포인트) 님이 2015년 3월 24일 질문

3개의 답변

+1 추천

보통 초기 데이터를 백그라운드로 가지고올때 데이터가 많으면 화면이 버벅되는건 정상입니다.

해당 문제를 해결할 방법은 몇가지 있는데요.

1.현재 사용중인 Thread 대신 LoaderManager 를 사용한다.

2.백그라운드를 포기하고 화면에 전체로딩을 단다.

3. 서비스를태워 해당 데이터를 가져온다.
 
저는 1번을 추천합니다. LoaderManager는 연산 쓰레드와 ui가 따로분리되어 현재 출시된 앱중.
 
톡관련 데이터가 많은 앱들은 LoaderManager를 거의 사용하고있습니다.

 

 

jo 님이 2015년 3월 24일 답변
0 추천
Thread에 priority를 조정하는 API가 있기는 한데, 의도한 대로 동작할지 여부는 알 수 없습니다.

백그라운드 연산량을 줄이는 것이 올바른 방법으로 보입니다.
익명사용자 님이 2015년 3월 24일 답변
0 추천
쓰레드의 Priority을 조절하는 방식은 어떨까요?

worker 쓰레드를 BACKGROUND_PRIOROTY로 정도로만 주어도 main thread의 반응성에 큰 영향을 주지는 않을겁니다.

만약 new Thread()나 ExecutorService로 worker 쓰레드를 생성했다면 main thread와 같은 priority로 생성되니 더 버벅이는 걸로 느껴졌을 지 모릅니다.
레오나 (3,290 포인트) 님이 2015년 3월 24일 답변
...