2012-07-05 116 views
2

我正在開發一款android應用程序,我需要下載一些圖像並開始幻燈片放映。 爲了下載我使用AsynTask的圖像,只要圖像被下載,我正在使用一個處理程序來啓動幻燈片放映。但是在方向改變期間,我無法控制處理程序。因爲處理程序對象是用AsyncTask類定義的。Android AsyncTask with Handler

的下面是我所做的粗糙情形:

類A延伸活動

B類異步=新ClassB的(本);

async.execute();

B類延伸的AsyncTask實現OnPageChangeListener,OnTouchListener

onPreExecute()-------沒有在該方法中

doInBackground -------我在這裏下載圖像

onPostExecute ---------處理器從這裏開始並運行每5秒實現幻燈片放映

現在的問題:

在方向更改期間,我已確保AsyncTask僅被調用一次,否則它會再次下載圖像,因爲此方向更改期間處理程序未運行。

第一個啓動的處理程序對象,它始終運行,但更改不反映在屏幕上。

我正在考慮通過使用AsyncTask來下載圖像,並且一旦下載完成,ClassA應該獲得焦點並且處理程序應該在ClassA中實現(僅當圖像被下載時)。

+0

在B類中創建一個接口方法,並在下載完成之後..(在onPostExecution中)告訴下載完成的接口。並在您的下載完成監聽器中完成幻燈片放映工作。 – 2012-07-05 10:23:37

+0

我沒有得到它,你能給我粗略的例子 – krisDrOid 2012-07-05 10:25:14

+0

_During方向變化我已確保AsyncTask只被調用一次,否則它再次下載圖像,因爲這個處理程序沒有運行在方向change._你最好在這裏解釋更多(可能有一些代碼示例),讓我們更清楚地瞭解你的實現。 – yorkw 2012-07-05 10:32:16

回答

0

接口類命名是根據我的情況。請根據您的rquirments調整它。 ArtikelDetailsDataLoader我的異步任務。這告訴我的活動,細節被加載。

在B級

public interface OndetailsLoadInterface { 
    public void onDetailsLoad(ArtikelDetailsInfo artikelDetails); 
} 

OndetailsLoadInterface detailsLoaderInterface; 

public void setOnDetailsLoadListener(OndetailsLoadInterface detailsLoader) { 
    detailsLoaderInterface = detailsLoader; 
} 

onPostExecute

detailsLoaderInterface.onDetailsLoad(artikelDetails);

,並在A級

ArtikelDetailsDataLoader mLoader = new ArtikelDetailsDataLoader( items.get(position).getId(), mContext); mLoader.setOnDetailsLoadListener(mLoaderLisnter);

OndetailsLoadInterface mLoaderLisnter = new OndetailsLoadInterface() { 

     @Override 
     public void onDetailsLoad(ArtikelDetailsInfo artikelDetails) { 
      //do slide show 

     } 

    }; 
+0

謝謝,我會實施它,並試一試 – krisDrOid 2012-07-05 11:05:38

0

只是做一個方法你Activity稱爲startSlideShow(position)您從onPostExecute()方法調用,與startSlideShow(0)

在方向更改上保存當前的幻燈片放映位置和下載的圖像,然後在您的onCreate(Bundle savedInstance)中,然後使用startSlideShow(restoredPosition);從上一個位置開始幻燈片放映。

0

如果您的問題是由方向更改時Activity重新啓動導致的,您是否考慮在AndroidManifest.xml條目中爲該活動設置android:configChanges =「orientation」,以防止重新啓動?然後,如果您需要對UI執行任何更新(例如切換到不同的佈局),則可以處理onConfigurationChanged(Configuration)並自己實現它。

+0

我已經做到了,但佈局保持不變,我有不同的橫向模式佈局。如果我使用configChanges標籤,橫向佈局不會加載 – krisDrOid 2012-07-05 10:56:02

+0

您需要再次調用setContentView,並重新初始化控件的內容,以確保加載新佈局。 – Jules 2012-07-05 10:58:21

+0

但是,如果我這樣做,那麼我必須再次調用AsyncTask,這不是一個好主意。另外,當異步任務實際處於執行模式並且存在方向更改時,它可能會導致問題。 – krisDrOid 2012-07-05 10:59:53