2011-10-20 44 views
0

恢復數據我有一個運行省電方法中onPause()使用的AsyncTask

String save = numberValue.getText().toString(); 
    FileInputStream fos; 

    try { 
     fos = openFileOutput(FILENAME,Context.MODE_PRIVATE); 
     fos.write(save.getBytes()); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     Toast.makeText(getBaseContext(), "Save has run", Toast.LENGTH_SHORT).show(); 
    } 

,我嘗試通過調用

new Loader().execute(FILENAME); 

讀取這個文件,我的Loader類看起來是這樣的:

public class Loader extends AsyncTask<String, Integer, String> { 

    protected void onPostExecute(String result) { 
     textview.setText(result); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     FileInputStream fis; 
     String loaded = null; 
     try { 
      fis = openFileInput(FILENAME); 
      byte[] dataArray = new byte[fis.available()]; 
      while (fis.read(dataArray) != -1) { 
       loaded = new String(dataArray); 
      } 
      fis.close(); 
      textview.setText(loaded); 
      return loaded; 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return loaded; 
    } 

} 

而我不知道爲什麼textview沒有設置爲來自FILENAME的字節。這個想法是,textview是一個越來越多的數字,這個數字在活動關閉時得到保存,並在活動再次啓動時恢復到textview。

它確實開始,我知道因爲幾分鐘後,Watch Dog告訴我,這款應用程序的後臺服務正在佔用大約50%的CPU。我沒有檢查/數據/數據/文件,我寫入的文件有正確的值。

回答

0

您可能需要撥打Loader來自onResume()才能使用。

+0

這也不起作用 – Ryan

0

爲什麼不使用onSavedInstanceState()方法保存所需的狀態?通過onPause方法將文件寫入文件系統將會使應用程序的切換非常緩慢。來自Activity Documentation regarding the onPause method

當系統即將開始恢復先前的活動時調用。這通常用於將未保存的更改提交給持久性數據,停止動畫和其他可能消耗CPU的內容等。此方法的實現必須非常快速,因爲在此方法返回之前,下一個活動不會恢復。

此外,從機器人文檔:

在其中系統需要更多的內存也可能殺死暫停的過程來回收資源的情況。因此,您應該確保在您從此函數返回時保存所有狀態。在一般的onSaveInstanceState(捆綁)用於每個實例的狀態保存在活動中,該方法被用來存儲全局持久性數據(以內容提供商,文件等)

Here's那裏我得到了從。

+0

我需要數據在用戶退出活動時保存,而不是在系統決定終止時。 – Ryan

+0

我很確定你的文本視圖在當時顯示的是什麼,如果你的活動剛剛暫停,那麼它將停留在那裏。 –