我正在为 sqlite android 做某种基准测试。如果我在执行前预加载 120k,大多数设备会有足够的内存吗?在执行查询时,还有其他线程正在运行,因此内存可能是问题所在。如何使用 onLowMemory() 方法?似乎没有太多使用该方法的示例。感谢您的任何建议。
1 回答
使用该方法就像在 Activity 中覆盖它一样简单。
但是,请仔细阅读文档:
这在整个系统内存不足时调用,并且希望主动运行的进程试图勒紧裤腰带。虽然没有定义调用它的确切时间,但通常它会在所有后台进程都被杀死的时候发生,即在达到我们希望避免杀死的托管服务和前台 UI 的进程终止点之前。
想要变得更好的应用程序可以实现此方法来释放它们可能持有的任何缓存或其他不必要的资源。从这个方法返回后,系统会为你执行一次 gc。
我不确定(并且文档没有定义)“后台进程”是否包括AsyncTask
实例和服务,或者只是后台应用程序,但我猜是这样。
所以,当这个方法被调用时(如果它被调用过),系统已经杀死了它可能的一切(优先级低于你的活动),现在要求你释放内存中任何不必要的资源。
所以,如果你想对低内存做出反应,这可能已经太晚了。
至于大多数Android设备是否会耗尽内存的一般问题,我不知道。问题是,设备变化很大。
我还发现很难想象任何真实的实时情况,在这种情况下,您需要在执行之前预加载(或堆叠)120k 个查询。您可以轻松堆叠 200 并提交这些,而不是再堆叠 200 等等。
我不确定您为什么需要对此进行基准测试,但请不要对应用程序数据库中的默认条目执行 120k 查询。
您可以使用已填充的数据库交付您的应用程序,然后从assets/
-folder 复制它。见android-sqlite-asset-helper