2017-01-03 96 views
0

我相信我的問題涉及內存管理。如何管理內存?

我的程序是一個匹配的紙牌遊戲。我的佈局由12個ImageViews組成。 我的活動文件有一個列表ImageView屬性引用這12個ImageViews。 這是在OnCreate方法中完成的,其中我還爲ImageView設置了單擊偵聽器。

這是點擊監聽的示例:

private void clickImage(View view){ 

    ImageView imgV = (ImageView) view; 
    imgV.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ImageView imgV = (ImageView) v; 
      new ShowCardImage().execute(Integer.valueOf(imgV.getTag().toString())-1); 
     } 
    }); 

} 

ShowCardImage是一個的AsyncTask類,其中一旦ImageView的被點擊時,相應的臉部圖像將被顯示。

該程序完全按原樣工作。當我選擇描繪封面圖像的圖像視圖時,它將替換爲人臉圖像。

現在我需要比較每2張選中的牌。我如何去做這件事? 我自動考慮使用List Integer屬性來表示ImageView的標籤。

現在爲了比較2張卡片,我應該創建另一個AsyncTask類。 如果是這樣的話,應在ShowCardImage執行後的偵聽器中調用它。或者我應該在ShowCardImage類中調用它。如果是的話,在doinbackground()onpostexecute()

而且,我現在的代碼是否適合內存管理?根據我的理解,每次單擊圖像時,都會在後臺執行任務。

因此可以說,如果用戶五次按卡1。這是否意味着同時創建5個獨立的後臺任務。列表屬性中的5個相同標籤用於跟蹤用戶選擇的卡片。

當我更改ShowCardImage類的圖像onProgressUpdate()時,確保將圖像的setEnabled設置爲false,可以避免這種情況嗎?

或者我必須檢查列表整數屬性中的項目一和二在doinbackground的開頭是否相同。如果是這樣,什麼是防止任務3,4,5,當我在任務2中刪除它時添加card1標記。

回答

0

我設法讓我的程序工作。爲了比較選定的卡,我創建了一個名爲DoCardsMatch的AsyncTask類。我在ShowCardImage的AsyncTask在onPostExecute方法

@Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     if(selectCards.size() == 2) 
      new DoCardsMatch().execute(); 
    } 

我也設法設置一個得分執行此。 我創建了一個列表來跟蹤每張卡片的各個點。每張卡片以20分開始。在DoCardsMatch類中,如果卡片不匹配,我從點列表中選定卡片相關位置減去5分。如果它們匹配,則在DoCardsMatch onPostExecute方法中執行另一個AsyncTask類來設置分數。

@Override 
    protected Void doInBackground(Void... params) { 
     //code written here 
     if(//cards match) 
        adjustScore = true; 
     else //cards don't match 
      adjustScore = false; 
      }   
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 

     if(adjustScore){ 
      Integer cardPts1 = cardPoints.get(loc.get(0)); 
      Integer cardPts2 = cardPoints.get(loc.get(1)); 
      SetScore score = new SetScore(); 
      score.setScore(false); 
      score.execute(cardPts1 + cardPts2); 
     } 

    } 

我想我管理內存好吧。我添加了一個新的遊戲按鈕。

程序啓動時分配了7.65 MB的內存。

玩了3場比賽後,分配的內存現在是8.88 MB。

但是當我按下Android監視器中的啓動GC按鈕。它下降到8.13 MB。

接下來我按下新的遊戲按鈕,我現在再次按下啓動GC按鈕,它下降到7.38 MB。