Android 시작 최적화 지연 로드
응용 프로그램이 시작될 때, 시작 속도를 높이기 위해서, 왕왕 비교적 무거운 조작을 하위 라인에 넣거나, 시간 지연 로드를 해야 한다.작업을 하위 스레드에 두는 것은 비교적 간단하고 효과적인 작업이다. 그러나 하위 스레드에 너무 의존해서는 안 된다. 비록 메인 스레드를 막지는 않지만 메인 스레드와 CPU를 점령할 것이다. 하위 스레드가 많고 임무가 무거울 때도 메인 스레드를 늦출 수 있다. 믿지 못하겠으면 Systrace를 쳐서 볼 수 있다.시간 지연 로드도 좋은 전략이지만, 어려운 점은 시간 지연이다. 이 시간은 통제하기 어렵다.
IdleHandler
이전에는 안드로이드가 왜 Activity나 Fragment에 인터페이스를 제공하지 않는지 생각했는데 우리가 메인 라인이 한가할 때 조작을 할 수 있도록 했다. 나중에 실제로 있는 것을 발견했다. 그러나 이 인터페이스는Activity와 Fragment가 아니라 MessageQueue에서, MessageQuque의 원본 코드에서 이러한 인터페이스를 볼 수 있다.
/**
* Callback interface for discovering when a thread is going to block
* waiting for more messages.
*/
public static interface IdleHandler {
/**
* Called when the message queue has run out of messages and will now
* wait for more. Return true to keep your idle handler active, false
* to have it removed. This may be called if there are still messages
* pending in the queue, but they are all scheduled to be dispatched
* after the current time.
*/
boolean queueIdle();
}
간단하게 말하면 MessageQueue에 더 많은 소식이 없을 때 리셋
queueIdle()
이라는 방법을,true로 돌아가면,MessageQueue에 소식이 없을 때 리셋을 계속하고,false로 돌아가면 실행이 끝난 후에 이 감청을 제거합니다.원리는 이렇게 간단하다. 다음은 코드를 최적화하는 것이다. 코드도 매우 간단하다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
// MessageQueue
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
//
delayLoad();
// false, 。
return false;
}
});
}
쓰기는 조금도 어렵지 않다. 단지 우리가 이런 지식을 습득해야 할 뿐이다.여기서 한마디 더 하자면 인터넷에서 차가운 시동 최적화에 관한 많은 글들이 ViewPager의 게으른 마운트, 즉 사용자가 미끄러질 때까지 기다려서 마운트 인터페이스를 말한다. 우리는 프로젝트에서 처음에 이렇게 했지만 사실 이런 체험은 정말 좋지 않았다. 그래서 우리는 IdleHandler를 이용하여 시간 지연 마운트를 했다. 즉, 메인 인터페이스의 시동 작업에 영향을 주지 않는다.또한 메인 라인이 비어 있을 때 바로 다른 탭을 불러와 성능과 체험 사이의 가장 좋은 균형을 찾을 수 있다.
참고 자료
android의MessageQueue를 아시오.IdleHandler요?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.