UI 스레드가 아니라면 어떤 스레드도 현재보기에 액세스 할 수 없다는 것을 알고 있습니다. 나는 왜 궁금해하니? 어떤 스레드가 뷰를 변경시키는 것이 중요한가요? 보안상의 이유입니까?UI 스레드가 아닌 스레드가보기에 액세스 할 수없는 이유는 무엇입니까?
public void doLayout()
{
Runnable run = new Runnable()
{
public void run()
{
ViewerActivity.setContentView(R.layout.main);
}
};
handler.post(run);
}
private Handler handler;'
그것은 내가 레이아웃을 변경하려면 그 때마다 할 수있는 고통의 종류 : 이것은 내가 사용하는 주위의 작품입니다. 다른 해결 방법이 있습니까? 비동기 작업에 대해 알고 있고 그것을 사용하는 좋은 방법을 찾지 못했습니다. 내가하는 일보다 낫지 않습니까? 모든 관련 답변은 appriciated 있습니다!
당신은 (사용하는 경우 즉 "동기") 자바/동기화 잠금에 대한 자세한 내용을 읽어야합니다 - 당신이 이해하면 당신은 순서대로 남이해야 할 이유가 명백 할 것이다 별도의 스레드에서 UI 스레드와 상호 작용할 수 있습니다. –
분리 이유는 교착 상태를 피하기 위해서입니다. 예를 들어 어떤 스레드에서든 뷰를 자유롭게 수정할 수 있다고 가정합니다. DB 호출을하는 것처럼 보자. 따라서 뷰 구성 요소에 대한 처리기를 가져 와서 데이터베이스를 쿼리하지만 데이터베이스는 현재 스레드를 잠근 다음 잠급니다. 뷰를 수정하는 중 이었기 때문에 이제는 UI 스레드가 잠기고 안전하게 계속하기 전에 뷰가 해제 될 때까지 기다려야합니다. 이것은 현재하는 것보다 훨씬 더 많은 것을 끝내게 될 정말로 나쁜 프로그램을 만들 것입니다. – methodin
플랫폼 및 언어에 관계없이 대부분의 UI는 기본 UI 스레드의 UI에만 액세스 할 수 있으며 일반적으로 스레드 안전 UI를 만드는 것은 매우 어렵고 그만한 가치가 없으며 원치 않는 속도 위반이 될 수 있습니다 그래픽 UI 환경이 신속하고 신속하게 대응되어야합니다. – nos