我有一个在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 //文件,我写的文件中有正确的值。
答案 0 :(得分:0)
您可能需要从Loader
致电onResume()
才能使用此功能。
答案 1 :(得分:0)
为什么不使用onSavedInstanceState()方法保存您需要的状态?在onPause方法上将文件写入文件系统将使您的应用程序切换速度变慢。来自Activity Documentation regarding the onPause method:
系统即将开始恢复上一个活动时调用。这通常用于提交未保存的持久数据更改,停止动画以及可能消耗CPU等的其他事情。此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复。
另外,来自android文档:
在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,您应该确保在从此函数返回时保存所有状态。通常onSaveInstanceState(Bundle)用于保存活动中的每个实例状态,此方法用于存储全局持久数据(在内容提供者,文件等中)
Here's我从那里得到了。