当app停止/设备关闭时,在android上保存片段状态/数据

时间:2016-05-12 21:20:28

标签: java android android-fragments save resume

我正在寻找一种方法让我的片段“恢复”它之前的状态,然后我关闭了设备(因为我保存了图像)。我看到什么导致了错误,但无法找到解决方案(类似的问题似乎没有回答如何在第一次打开App / Fragment时加载OnCreate)。 当我打开我的应用程序时,它会在我的主要活动上创建新的片段:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, new HomeFragment(),"Home_Fragment")
.addToBackStack("Home_Fragment").commit();

FragmentTransaction bin = getSupportFragmentManager().beginTransaction();
bin.replace(R.id.my_image_container, new MyImageFragment(), "banner").commit();

   // Listening for image to be sent over

   RepeatTask();
    }

现在,当我在片段之间切换时,我已经设法让片段保存所有数据,如下面的片段java文件中所示:

HomeFragment hm = (HomeFragment)myContext.getSupportFragmentManager().findFragmentByTag("Home_Fragment");
FragmentTransaction ft = myContext.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, hm, "Home_Fragment").commit();

但是当我离开应用程序时,意味着我要么永久停止它,要么关闭手机并重新打开它,所有数据(图像)都消失了,这是有道理的,因为我的主要活动重新启动它。 你们中的任何人都知道我每次打开应用程序时都可以让我的MainActivity没有启动新的片段,但是“恢复”旧的状态,我保存的图像通过TCP从计算机中保存

2 个答案:

答案 0 :(得分:1)

如果按钮是根据图像动态加载的话。您可以通过图像读取缓存循环,并为每个图像创建一个按钮。

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

如果需要保存更多属性,我会考虑使用sqlitedatabase(与缓存结合使用) sqlite数据库可以保存许多数据类型,如数字,tekst,日期和二进制格式数据。 图像可以保存为(基础64)二进制字符串。但是从数据库加载二进制字符串比缓存慢。

在此处阅读有关数据库的更多信息 http://developer.android.com/training/basics/data-storage/databases.html

两个链接都包含示例。

我想给你的一个小小提示是尝试只保存真正需要的东西,不再需要。 不要试图保存ui的东西。 并尽可能将数据保存为抽象。

学习数据库规范化可以让您更好地了解这一点。

答案 1 :(得分:0)

尝试保存片段实例状态实际上是一种不好的做法。 Android有自己的方式来处理这个问题。

当您想要保存从网页下载的某些数据并且您不想在重新打开应用时再次下载该内容时,您需要将数据保存在知道的位置。 这种事情的解决方案是(磁盘)缓存或sqlite数据库。当您需要保存的数据是图像时,保存它们的最佳方法是使用磁盘缓存。