2010-12-29 2 views
0

응용 프로그램에서 활동에 직접 메서드를 호출 할 수 있습니까?

public class MyApplication extends Application { 
... 
} 
Start는 AndroidManifest.xml에 구성된 기본 활동을 포함합니다.

MyApplication은 데이터를로드하는 AsyncTask를 시작합니다.

AsyncTask가 반환되면 응용 프로그램은 Start,
를 알리려고하지만 MyApplication에는 시작에 대한 참조가없는 것처럼 보입니다.

응용 프로그램에서 작업에 직접 메서드를 호출 할 수 있습니까?

+0

이 이벤트가 발생할 때 알림을 위해 일종의 관찰 가능/관찰자를 사용하십시오. 또한 싱글 톤. – fiction

+0

아니요. 불가능합니다. 다른 클래스의 다른 활동에서 비 정적 메서드를 호출 할 수 없습니다. – Falmarri

답변

3

응용 프로그램에서 작업을 직접 호출 할 수 있습니까?

확실히. 당신이 조심하지 않으면 메모리 누출로 끝날 것이고, 나는 당신이 열악한 프로그래밍이라고 묘사하는 것을 고려할 것이다. @fiction이 제시하는 것처럼 최소한 리스너 또는 관찰자 패턴을 사용하십시오.

AsyncTask가 반환되면 응용 프로그램은 시작을 알리려고하지만 MyApplication에는 시작에 대한 참조가없는 것처럼 보입니다.

는 그런 다음 AsyncTask와 함께 사용하기 위해 MyApplication와 함께 (@ 소설의 용어를 사용하거나 관찰자) Start 레지스터를 청취자의 일종을 가지고 적절한 자바 코드를 작성합니다. 해당 수신기를 등록 취소하거나 SoftReference 또는 무엇인가를 사용하여 MyApplication이 의 유효 기간을 지나지 않았는지 확인하십시오.

물론, Start의 여러 인스턴스를 가질 수 있다는 사실을 처리해야합니다.

1

응용 프로그램 onStart()에서 AsyncTask를 시작하는 것은 상당히 이상합니다. 즉, 사용자가 앱을 시작하고 데이터로드가 완료 될 때까지 사용자가 애플리케이션의 기능에 대한 피드백을 사용자에게주지 않습니다. 그런 다음 잠시 후 활동이 팝업됩니다.

또한 Application.onStart()는 시스템에서 강제 종료 또는 강제 종료가 발생할 때까지 응용 프로그램 수명주기에 한 번만 호출된다는 사실을 잊지 마십시오.

필자는 개인적으로 Activity를 시작하고 Activity.onCreate()에서 최소한의 UI 구성 요소 집합을 초기화 한 후 무언가 진행되고 있음을 알게되면 AsyncTask를 시작하여 데이터를 검색합니다. 이런 식으로 일을 처리하면 AsyncTask에 의해 업데이트 된 진행률 표시 줄을 아주 쉽게 표시 할 수 있습니다.

관련 문제