15

我和一些团队成员开发了一个 android 应用程序,它通过移动设备收集现场数据。

现在这个应用程序将投入生产。所以一般人都会使用这个应用程序。我们还需要编写一个文档来解释应用程序中引入的所有内容以及运行此应用程序所需的最低硬件要求而不会出错。

现在我怎么知道最低硬件要求是什么?

基本上在我的应用程序中大约有四个TextFields、三个SpinnersDatesEditTexts两个ImageViews

那么我怎么知道运行这个应用程序需要什么最低内存要求。

我已经在一个移动设备上尝试过这个应用程序,其中几乎所有的内存都被其他一些应用程序用完了。我的应用程序无法拍摄照片。当我删除一些应用程序时,我的应用程序工作正常。

这就是为什么我想知道运行我的应用程序所需的最低内存要求。

4

6 回答 6

13

最低要求将取决于并且主要包括以下几点的测试和文档:

  1. API 级别:支持的最低 android 版本,开发人员最了解它。android 中的 API 之间发生了许多重大变化。支持 v4 和 v7-compat 库确实有很大帮助,但它们并没有涵盖所有方面。

  2. 设备功能:记下您的应用使用的所有功能。(比如有触摸屏、有摄像头、加速度计、网络连接等)。幸运的是,您可以在 App manifest ( uses-feature) 中声明,Play Store 将过滤掉不支持的设备。

  3. RAM:使用DDMS / Android Studio在模拟器和真实设备上查看实时内存使用情况。尽量使用尽可能多的ram,通过触发App的各种功能,让它长时间运行。以最小和最大使用量作为估计。TraceView 等 DDMS 工具还可以让您查看堆、线程上的对象分配,并进行方法分析。长时间运行Monkey Tool以给应用程序带来压力。

  4. CPU 速度如果应用程序进行密集计算、数据转换等,您可能希望在此类计算代码中编写一些时间戳日志。确保您设置 CPU 速度,以便无论需要完成什么计算,都可以在足够的时间内完成,而不会使设备滞后太多。同样在视觉渲染的情况下,(游戏)良好的帧速率是主要因素。在这种情况下,您可以对真实设备的帧速率进行基准测试,并选择高端芯片组。您还可以为多核设备推荐用户。

  5. CPU/GPU 兼容性:另一个重要细节是,如果应用程序具有 C/C++ 代码,则该代码可能无法在某些 CPU 类型(MIPS、ARM 或 x86)上运行。使用 OpenGL ES 版本和可用扩展的应用程序也是如此。设备确实有不同的 cpu/图形芯片组。

  6. Disk : 估计app安装后的大小,注意App的最低磁盘要求是存储app本身需要的空间,这样至少可以启动,不包括缓存、数据库或者它创建的用户内容关于使用。

  7. 显示尺寸:虽然始终建议使用响应式和灵活的 UI,但您的应用可能仅适用于某些屏幕尺寸。因此,可以考虑兼容的屏幕尺寸。

  8. 您无法控制的内容:请记住,您无法控制其他应用程序用户可能运行的内容,因此,可以安全地声明您的应用程序在设备上需要这么多免费ram,并假设最好的情况,声明该设备至少具有安装了很多内存。例如,您注意到您的应用程序在最大化时占用 200 mb,因此要求仅为 512mb+ 设备。此外,您无法控制用户的 sd 卡大小,因此应用程序应及时告知用户磁盘已满时无法运行。

最后,良好的测试是将估计变成真正的基准。最好将要求基于基准,而不是仅基于估计。

更新

android是否有任何API或类根据我在应用程序中使用的字段以及我在手机上获得的权限来提供最低内存要求的信息。

  1. API 无法准确预测运行时间。您的代码中会有很多if' 和else',加上用户输入,您无法预测对象创建和执行将沿着哪条确切路径进行。您只能使用 DDMS 等工具从外部监控运行时。

  2. 与 Apple 不同,Android 是一个开放系统,制造商可以自由选择的设备硬件的可能性是巨大的。再加上他们在设备 ROM 中所做的自定义。没有通用的 API 可以跟踪所有这些。只需坚持 android API 和标准规范,避免使用隐藏的 API 等。

于 2013-03-24T15:41:45.457 回答
3

你应该问自己的问题

1. 我的内存要求是什么? 您需要大量内存(不是物理内存,而是在堆中)来处理数据还是最少?现在一天中的大多数设备都带有 64 MB 堆大小,但这因制造商而异。即使对于相同的 API 级别,它也是不同的。找出你的最小值,然后确保你有足够的堆内存可用。

要监视您在运行时消耗的内存,请检查

要了解当前设备上可用的堆内存量,请检查thisthis

请记住,android 不像 windows,每个应用程序都以相同数量的堆内存开始,并且对于该设备上的每个应用程序来说都是恒定的。这意味着不允许应用程序增长超出此可用内存。您可以通过清单中的此标记请求额外内存, android:largeHeap="true"但此功能不适用于 pre 3.0 OS 版本。

我已经在其中几乎所有内存都被其他应用程序使用的移动设备中尝试了这个应用程序。我的应用程序无法拍摄照片。当我删除一些应用程序时,我的应用程序工作正常。

上述假设非常令人困惑,因为当您的应用程序运行 Android 时将所有其他应用程序放在一边,这意味着您的应用程序将具有由您的堆大小定义的内存,并且如果操作系统认为它需要更多内存或未能分配更多内存,它将杀死这些进程。Android 优先考虑当前正在运行的任务。因此,如果您正在与应用程序交互,那么它的内存极不可能比堆大小少。他们可能有其他应用程序出现问题的不同原因。

2. 我的 API 要求是什么? 如果您使用的是旧 API 和级别不可用的任何特殊 API,那么您有两个选择,或者您说您的应用程序根本不支持该 API 版本,或者您可以支持该特定功能。

3. 我的硬件要求是什么? 问问自己,您是否正在使用任何专业软件或硬件,是否所有设备都可以使用该特殊硬件?例如,NFC、蓝牙。

4. 我的显示要求是什么?这个应用程序仅适用于移动设备还是同时适用于移动设备和平板电脑?那些介于平板电脑和手机之间的 7 英寸呢?

5. 我的本地化要求是什么? 这个应用程序是否依赖任何特殊字符集?如果某个设备没有这些字符怎么办。

而且,仅供参考,您提到的对象数量不应超过几 MB。但在使用位图时要小心。读这个

于 2013-03-25T07:32:49.957 回答
2

确定您的应用程序是否可以在某些硬件上运行的最佳方法是在该硬件上进行测试。询问您的朋友是否有较旧的 Android 手机,并在其上测试您的应用程序。

最坏的情况是创建多个具有不同内存的 Android 虚拟设备。但请注意,即使使用硬件加速,android 模拟器也慢得令人失望。

于 2013-03-20T04:55:38.977 回答
2

似乎可以保证 Android 中的任何进程都至少有 16MB 内存,大多数现代设备允许堆增长到 24+MB

请参阅 http://developer.android.com/reference/android/app/ActivityManager.html#getMemoryClass()的描述

内存管理全部在操作系统端,并且在http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle中描述了进程和线程的优先级

因此,如果您的应用程序在前台,则很可能您有足够的资源来处理来自相机的图像。

您使用什么 API 来捕获图像?

于 2013-03-19T16:07:45.150 回答
2

正如@veon 所说,您可以做出一些估计。但是,它总是有点不可预测,因为您想知道它在不同的环境中会使用多少,并且您需要用户知道他们手机上其他应用程序的使用情况。

据我了解,您主要需要提供的是清晰的文档。将其记录如下(对您和每个人)可能会容易得多:

此应用程序将在所有最新的标准安卓手机(安卓版本 XXX 及以上)上运行。但是,如果其他应用程序正在运行,特别是内存消耗量很大的应用程序正在运行,则它的性能可能会受到影响。如果您遇到性能问题,请删除其他占用大量内存和进程的应用程序。如果您需要帮助确定这一点,请使用 ZDbox等应用程序来帮助您。

作为参考,我没有指向 ZDbox 的链接,我只是将其用作示例。

于 2013-03-20T12:24:54.950 回答
1

这就是为什么我想知道运行我的应用程序的最低内存要求是多少。

使用little eye labs的监控工具。它监控您的应用程序的功耗/内存消耗/CPU 消耗/网络活动。您可以下载它进行 30 天试用。这应该让您对您的应用程序消耗的资源有一个公平的了解。我不得不说,虽然应用程序通常不会以一组硬件要求发布。检查您的内存/电池使用情况,您应该没问题。

至于内存不足,当您显示相机拍摄的照片时会发生这种情况还是相机本身会关闭应用程序?您是否正在释放相机占用的资源?看看这个问题——Android camera out of memory exception

于 2013-03-24T16:00:18.733 回答