使用AsyncTask恢复数据

时间:2011-10-20 01:33:52

标签: java android android-asynctask storage

我有一个在onPause()期间运行的保存方法:

    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。我检查了/ data / data //文件,我写的文件中有正确的值。

2 个答案:

答案 0 :(得分:0)

您可能需要从Loader致电onResume()才能使用此功能。

答案 1 :(得分:0)

为什么不使用onSavedInstanceState()方法保存您需要的状态?在onPause方法上将文件写入文件系统将使您的应用程序切换速度变慢。来自Activity Documentation regarding the onPause method

  

系统即将开始恢复上一个活动时调用。这通常用于提交未保存的持久数据更改,停止动画以及可能消耗CPU等的其他事情。此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复。

另外,来自android文档:

  

在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,您应该确保在从此函数返回时保存所有状态。通常onSaveInstanceState(Bundle)用于保存活动中的每个实例状态,此方法用于存储全局持久数据(在内容提供者,文件等中)

Here's我从那里得到了。