- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
背景:
android.support.v4.app.FragmentActivity
。在 Android v2.2 上运行。目标:
问题:
我能否将标记/多段线“保存”为包的一部分,并通过使用适当的 savedInstance.put 将它们保存在
方法,然后使用适当的 onSaveInstanceState
中来简单地重新显示它们。 .savedInstanceState.get..
方法在 onCreate
中“恢复”它们。
在查看 Marker getID()
的描述时,我对 Marker.getId()
method 的 Google 文档感到困惑。陈述如下:
When a map is restored from a Bundle, markers that were on that map are also restored. However, those markers will then be represented by different Marker objects. A marker's id can be used to retrieve the new instance of a Marker object after such restoration.
Google 文档(上面的粗体文本)听起来好像标记的只是自动恢复而无需采取任何操作。那不是我的经验……也许我误解了所陈述的内容。或者,也许您必须在 Bundle 中明确保存 map ?谁能解释一下这是什么意思?
假设我必须通过适当的 savedInstance.put...
方法将标记和折线显式保存到包中,我应该保存整个标记还是保存标记 ID并使用标记 ID 检索标记信息以重新显示标记?我找不到可以让我保存整个标记的 put
方法。
我注意到 MapFragment
section Google Maps Android API v2 声明如下:
Any objects obtained from the GoogleMap is associated with the view. It's important to not hold on to objects (e.g. Marker) beyond the view's life. Otherwise it will cause a memory leak as the view cannot be released.
这句话让我相信我不应该尝试保存标记本身,而是尝试保存标记 ID,然后根据与标记 ID 关联的标记对象重新生成标记。折线也是如此。我的假设正确吗?
另外,我应该避免将标记作为类变量吗?我担心的是,如果 Marker 是一个类变量并且 Activity Map fragment 被放置在返回堆栈上,这可能会导致内存泄漏,因为它将有效地“保持在对象上”,如上述文档中所述。这是我应该关心的事情吗?
问候。
最佳答案
Can I "save" the markers/polylines as part of the bundle and simply have them re-displayed by saving them in the onSaveInstanceState using the appropriate "savedInstance.put.." methods and then "restore" them in onCreate using the appropriate "savedInstanceState.get.." methods.
没有。
The Google documentation (bolded text above) makes it sound like the Marker's are just automagically restored without having to take any action. That isn't my experience...Maybe I'm mis-interpreting what is being stated. Or maybe you have to explicitly save map in the Bundle? Can someone clarify what this means?
您没有误解任何内容。文档不正确。
should I save the Marker ID and retrieve the marker info using the marker ID to re-display the marker
标记 ID 在配置更改时不是永久性的 - 它取决于视觉对象创建的顺序(第一次调用 addMarker
返回 ID 为“m1”的对象,第二次调用“m2”)。您不能以任何方式使用此值(从 API 版本 3.1.36 开始)并且恕我直言,它的存在确实没有意义。我实际上已经提交了an issue related to ID .至少应该有一个函数 GoogleMap.getMarkerById(String)
用于 Marker.getId()
没有什么意义。
3) Also, should I avoid having the Marker as a Class variable? My concern is that if the Marker is a class variable and the Activity Map fragment is placed on the back stack that this could cause a memory leak because it will effectively be "holding on to the object" as noted in the aforementioned documentation. Is this something I should be concerned about?
是的。保持对 Marker
或任何其他可视对象的静态引用会导致泄漏。
并不是说回答了您所有的问题和疑虑就离解决方案更近了,所以这是我的建议。
我假设您有一个数据集,Markers
和 Polylines
是从中创建的,并且可能在从 web 服务获取后将其存储在数据库中。现在,如果您在 Activity
的 AsyncTask
中从 DB 加载它,或者甚至不将其存储在 DB
中,而仅在 Activity< 中获取
直接 - 这很糟糕。
尽量使您的数据尽可能易于访问,因此只需在进程被终止后(或在内存不足时删除它后)将其重新加载到内存中。如果你这样做 - 那很好。当然不是全部:如果你有 20000 个标记并且每个标记的图像都显示在信息窗口中,它可以等待......
现在您已经拥有在内存中创建标记所需的所有数据,只需像第一次一样创建它们。无需额外代码。
我们可以争论这是好主意还是坏主意,我会改进答案,但这需要有关上下文的更多信息:
当然还有另一种方式:可以在onSaveInstanceState
中发送MarkerOptions
。如果您保持它是最新的,或者如果您的 Markers
没有改变并且没有那么多,这可能对您有用。我无法理解每次旋转或按 HOME 按钮时都通过 IPC 发送数千个对象。
关于android - 旋转手机时如何最好地重新创建标记/折线(方向更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902519/
在德国,移动运营商通常会提供一种简单的方法来配置您的手机的 MMS 和 GPRS:在运营商的网站上输入您的电话号码和设备型号后,您会收到一条发送给您的“配置短信”。 我试图从技术角度理解它是如何工作的
我正在开发一个非常复杂的应用程序。它针对手机和平板电脑有不同的布局,我不知道最好的方法。 我听说您可以发布两个不同的应用程序,一个用于移动设备,另一个用于平板电脑,但人们不推荐它。 我应该用两个不同的
我不确定这个问题属于这里....但仍然.... 我的应用程序每 3 分钟与服务器交换一次数据。我在手机覆盖范围内使用蜂窝平板电脑(不是 Wi-Fi)。如果一个人在没有手机覆盖的地方使用它,他将不会获得
我有这样的 CSS: .editTable-body { width: 100%; height:140px; margin-top: 20px; overflow:
我有这个链接,它在移动设备上被设计为按钮,我面临的问题是它在手机和平板电脑上看起来不同。这是因为设备分辨率还是我应该通过 CSS 修复的问题。这是我当前的 CSS CSS border-radiu
大家好,我一个月前开始学习网络开发,但我遇到了背景图片无法在移动设备上正确显示的问题。 我正在使用下面的模板,甚至这个模板也有同样的问题。 问题只是背景图像在移动设备上放大,而不是相应地与屏幕尺寸成比
我一直在尝试为我的网站制作一个导航栏,但是当我移动它时,我导航栏中的列表移动了 40 像素到计算机屏幕的右侧,那里没有任何东西。 你能帮帮我吗? 最佳答案 在您的导航栏样式中,将导航栏的宽度设置为 1
一周以来,我一直不明白为什么我的网站被设计成响应式的,一切正常吗?笔记本电脑即使放在小尺寸的情况下也能完美运行,然后进入我的手机却没有响应。 我试过卸载插件,我更改了主题,但找不到原因。 你能抱住我吗
我在 my website 上实现了以下字体. /* Vivaldi Font */ @font-face { font-family: 'vivaldi'; src: url('as
我正在使用 Angular 4 并构建一个应用程序。它工作正常,但当我在移动设备上运行时出现问题。整个风格发生了变化并分发了整个应用程序。我担心我必须做什么。任何帮助将不胜感激 最佳答案 在表格前取
我目前使用的是 HTC Wildfire 手机的接近传感器。问题在于,如果传感器前方 1 厘米范围内有物体,它只会返回一个 bool 值。 所以,我想问一下市场上是否有一款 Android 手机具有接
根据 this Android C2DM 通过心跳机制使套接字保持 Activity 状态,使其能够接收推送消息。这让我希望我可以通过活跃的 wifi 连接向休眠手机发送消息。 我已经将“delay_
我不希望小型设备的边缘有任何空白。当屏幕已经很小时,使用除屏幕全宽之外的任何东西都会适得其反。 所以我通过wordpress使用了一个主题,但我想出了容器div并且能够修改它,我想让它更窄。 我还声明
有谁知道这些设备之一是否连接到网络,是否可以从 header 或其他方式读取其电话号码? 最佳答案 电话号码不会出现在 HTTP header 中。您的 IP 地址将对网络服务器可见,仅此而已。 编辑
我在使用以下步骤在 android 设备上设置设备所有者时遇到错误。这过去在其他设备上也有效: 执行恢复出厂设置 在设备上启用 Debug模式 从命令行在连接的设备上运行以下命令: adb insta
有人尝试在 Windows Phone 7.1 (RC) 上使用 Udp 单播吗?我有几个问题想问你们。 根据文件http://msdn.microsoft.com/en-us/library/sys
我正在制作一个游戏(仅使用 eclipse 和 android sdk),并且我有一个基于文本文件输入的关卡构建功能。 例如,“levelone.txt”可能包含“[2,5],[14,7],[10,9
我听说要测试 Android 应用程序,您必须在 2 部不同的手机上进行测试(取决于分辨率)推荐哪些手机? 最佳答案 我还建议在一台配备“纯”Android 的设备上进行测试,并且至少在另一台配备 H
我正在使用蓝牙设备手动连接 Android 手机,没有问题。但我的问题是当我启动 Activity 或应用程序时如何自动连接。 我正在引用示例 API 中的蓝牙聊天进行连接。 http://devel
我知道我可以使用 uri 在页面之间传递值,例如: NavigationService.Navigate( new Uri("/DestinationPage.xaml?parameter1=v1",
我是一名优秀的程序员,十分优秀!