2012-03-02 2 views
5

과거에는 방향 변경과 AsyncTask (및 다른 장기 실행 백그라운드 작업)가 서로 잘 수행되지 않았습니다. 새로 생성 된 액티비티 (오리 엔테이션 변경에서)에서 실행중인 태스크 (또는 스레드)와 액티비티가 연결되지 않은 상태에서 태스크가 끝날 때 수행 할 작업을 파악하는 문제가있었습니다.Android, AsyncTask, 장기 실행 프로세스 및 방향 변경

Fragments 및 LoaderManager를 사용하더라도 여전히 문제가되는 것 같습니다.

장기간에 걸친 임의의 작업 및 방향 변경을 관리하는 요즘 선호되는 방법은 무엇입니까? 새로 생성 된 활동에서 실행중인 작업을 확인합니다. 활동이 첨부되지 않은 경우 작업이 정보를 전달하려고 시도하지 않도록합니다.

고맙습니다.

+2

"프로세스"를 의미하는 것이 아니라 다른 것을 의미하는 곳에서 "프로세스"라는 단어를 대체하여 질문을 다시 작성하는 것이 좋습니다. OS 프로세스에는 매우 구체적인 정의가 있습니다. 질문을 거의 이해하지 못하게 만듭니다 (예 : 프로세스가 정보를 제공하지 않으며, 활동이 프로세스를 생성하지 않음). – CommonsWare

답변

4

난 그냥 매니페스트에 내 활동에

android:configChanges="orientation|keyboardHidden|keyboard" 

를 넣어 그것으로 할 수. 1 년 후 나는 0의 문제를 겪었다.

+0

구성 변경 사항을 어떻게 처리합니까? – synic

+0

나는 그 매니 페스트에서 그것을 가지고 활동이 재현되지 않도록하고 따라서 모든 문제를 해결한다는 것을 알았다. 나는 그것을 직접 처리 할 것이지만 실제로는 불필요하다는 것을 알게되었다. 그것은 당신이 기대하거나 원하는 방식으로 작동합니다. – Pyrodante

+0

와우. 나는 그것이 내가 원했던 것보다 더 복잡해 보였기 때문에 항상 이것에서 벗어났다. 네 말이 맞아, 내가 원하는 방식대로 일하는 것 같아. – synic

-1

항상 그랬듯이 : 서비스를 이용하십시오. 서비스의 이벤트를 브로드 캐스트하고 활동 (또는 일부 중간 계층)에서이를 잡아냅니다. 활동은 그 상태에 따라 해당 이벤트로 수행 할 작업을 선택할 수 있습니다.

이것은 다소 광범위한 질문입니다. 내 프로그램에서

+1

이것이 서비스가 해결하려고하는 문제는 아니라고 생각합니다. 응용 프로그램에 작업 라이프 사이클과 관련이없는 작업이 없으면 서비스는 자원 낭비 일뿐입니다. – synic

0

다른 게시물에서 알 수 있듯이 android : configChanges = xxx를 사용할 수 있습니다.

그러나 이것이 항상 바람직한 것은 아닙니다. Android는 구성 변경시 활동을 중단하고 새로운 활동을 생성하도록 설계되었으므로 일부 상황에서는 대체 화면 레이아웃을 제공하여이 기능을 사용할 수 있습니다. 예를 들어 가로 방향의 세로보기와 다른보기를 보여주는 멀티 패널 응용 프로그램에서 의미가 있습니다.

그래서 질문에 다시 돌아가려면 장기 실행 작업을 처리하는 데 선호되는 방법을 읽지 않았지만 지속적인 작업 상태 (onRetainNonConfigurationInstance/onCreate에서 복원 됨)에 그러한 작업을 저장하는 것이 좋습니다. , 또는 영구적 인 단편을 사용합니다.

활동이 이미 실행중인 작업을 감지하면 대화 상자를 다시 만들어 진행 상황을 표시 할 수 있습니다.

참고 : 귀하의 활동을 재창조 할 수있는 유일한 자리에 오르지 변화가있는 것은 아닙니다. 언어 변경, 도킹 및 기타 가능성에 대비하십시오. :) 그러나 여전히 방향 변경이 가장 일반적입니다.

+0

지속성 단편은 활동이 첨부되지 않은 경우에도 결과를 제공 할 가능성이 있습니다. onRetainNonConfigurationInstance는 활성 네트워크 연결을 저장할 수 없습니다. 여기서 문제는 구성 변경에 대한 상태를 저장하는 것이 아니며 활동이 연결되어 있지 않을 때 데이터가 전달되지 않도록하거나 죽은 활동으로 데이터를 전달하지 않도록하는 것입니다 – synic