2012-03-03 2 views
2

AsyncTask 제네릭 패키지를 작성하려고합니다. 지금까지 내가 한 것은 다른 활동에서 호출 한 활동을 인 텐트의 인스턴스를 해당 활동으로 보냅니다. 이 활동은 AsyncLoader.execute() 파일을 호출하는 AsyncTask의 일부입니다. 부모 작업에서 레이아웃에 설정 한 데이터가 손실되지 않도록하기 위해이 작업을 수행하고 있습니다.AsyncTask를 구현하는 가장 좋은 방법입니까? 아니면 더 좋은 방법이 있습니까?

다른 방법은 의도를 호출하고 AsyncActivity에서 부모 Activity로 데이터를 반환하는 것입니다. 그러나이 두 가지 방법 모두 부모 작업에서 AsyncTask를 구현하는 것보다 느립니다.

하지만 코드가 복잡해집니다. 따라서, 그것을 구현하는 더 좋은 방법이 있습니까?

답변

3

이상한 해결 방법으로 극복하려는 문제를 일으키는 활동과 AsyncTask 사이의 밀접한 결합으로 들립니다.

  • 즉, 활동에서 당신의 AsyncTask를 유지 extends AsyncTask하는 별도의 클래스를 을 : 내 경험에

    가장 좋은 방법

    은 AsyncTask를이 필요한 활동을 설계합니다. 이를 통해 AsyncTask 을 여러 활동 사이에서 재사용하고 테스트하기가 더 쉬워집니다.
  • 데이터를 다시 활동으로 리턴해야하는 경우, 리스너를 사용하고 활동에 리스너를 구현하십시오. 그런 다음 리스너를 AsyncTask를 만드는 클래스로 전달합니다.

인 텐트 간의 데이터 전달은 최소한으로 유지해야합니다. 별도의 활동에서 동일한 AsyncTask를 다시 사용해야 할 경우 위의 단계를 수행하고 작업을 다시 실행해야합니다. 앱의 라이프 사이클을 통해이를 호출하려면 service을 대신 사용해보세요.

+0

나는 그것이 끔찍한 해결에 동의합니다. – Hick

+0

다양한 다른 방법으로 인 텐트 사이에 많은 데이터를 전달하고 있습니다. 그것은 그것을하는 나쁜 방법인가? – Hick

+0

작업을 수행하는 데 복잡한 객체가 아닌 클래스 (즉, 데이터를 캡슐화하는 클래스) 사이에 단순 도메인 객체 만 전달해야합니다. 의도는 필요한 데이터를 제공하기위한 것일 뿐이지 만 데이터가 사용되는 방법을 결정해서는 안되며 이는 활동 책임이어야합니다. –

관련 문제