文章来源:http://www.eyeandroid.com/thread-691-1-1.html
Activity 里面提供了一个 managedQuery() 方法,按照 Android SDK 里面的说明,“the activity will manage its lifecycle for you.” 听起来很好,Activity 可以替你管理 Cursor 的生命周期了,就不用记着去 close() 了,代码可以更简洁。
但是 Activity 是怎么去管理 Cursor 的生命周期的呢?SDK 文档没说。最近遇到一个 bug,在一个 Activity 中,用 managedQuery() 查询数据库,将查询得到的 Cursor 用 CursorAdapter 与 ListView 绑定。然后在 Activity 里面执行批量删除数据表记录操作,因为耗时比较长,所以用了多线程处理。测试团队发现的 bug 是,在删除操作进行过程中,如果按下 Home 键,应用就崩溃了。崩溃原因是 Cursor 被释放了,导致工作线程的删除操作异常。
看了 Activity.java 的源码之后就明白为什么会崩溃了。managedQuery() 其实无非就是把查询得到的 Cursor 放到了 Activity 类的一个数组成员变量中,然后当 Activity stop 的时候,将这个数组里的每个 cursor 都关掉,以及在 resume 的时候,将数组里的每个 cursor 都重新查询一次。所以在按下 Home 键之后,Activity 被 stop 了,cursor 也就被关闭了,如果有个线程还在继续使用这个 cursor,就会抛异常了。
因此,在用 managedQuery() 的时候,需要清楚 cursor 什么时候会被释放,并考虑好自己的代码在 cursor 被释放后不再需要使用这个 cursor.
每天世界各地的消费者都会从联网设备上下载千千万万的应用,这些联网设备的数目在不断增长,包括笔记本、平板电脑、电子 阅读器、智能电视以及智能手机。现在大多数应用发布者都发现他们处于一个相似的境地中:他们已经做了决定,到底是要为每个操作系统开发native apps还是使用HTML5构建一个web app,并且他们知道需要从什么发布渠道发布产品。但是,他们仍然面临的一个最大的挑战是如何让产品拥有需求。因此,在开发产品的时候,考虑一下未来的产 品趋势,对于产品的长久生命力极其带来的经济收益是有用的。
在过去的几年里,全球的app开发者、发布者以及商 店发现这个产业正受一个全面影响科技消费的趋势控制:消费者的选择。消费者可以对一个app给予正面或者负面都评价,并从他们喜欢的商店中选择应用——一 切都是按他们的喜好来进行。例如,一个Android用户可以从他们选择的app store中下载或者浏览应用,包括Android Market,他们手机网络的app store,或者是其他来源,比如getjar.com 。即使是“即开即用”的Apple设备的用户也可以从Apple的App Store下载应用或是使用一个HTML5 app。
所以在消费者占据主导地位的全球市场中,应用发布者以及开发者在2012年需要考虑一些趋势,以便让他们的应用能有较高的需求率,满足消费者需要,并获得尽可能多的利润。
1.应用货币化(App monetisation)
应 用货币化是指当app在用户手中以后仍然可以源源不断产生消费。当一个应用发布者已经在各种应用发布渠道中站稳脚跟以后,随着他们更好地理解了app stores的协议的条目和款项,货币化就应该是他们下一步需要关注并考虑的了:现在,65%的“免费增值”游戏资金都来源于应用内部购买(in-app purchases),Apple的应用收入的72%也来源于此。因此有一个稳固的货币化政策的发布者将会在2012年在市场中占统治地位。货币化的第一 步是理解你的应用程序的用户群目前的终身价值。下一步,让这个价值更高。增加消费者终身价值的货币化技巧包括house ads和广告网络的应用内部广告(in-app advertising),基于应用内部激励(in-app incentive)的广告,促进其他应用发布的应用内部广告(in-app advertising),以及出售增值产品和服务的应用内部购买(in-app purchases)。
一个促销其他应用的non-incentivised in-app ad的应用货币化的例子
2.安全
现 在媒体关于网络攻击的报道让联网用户对于安全问题更加敏感。例如,大多数iPhone用户并不想“越狱”,为此他们会修改他们的设备,以减少被暴露的威 胁。他们认为单点登录(single sign-on)和社交群组登录(social sign-on)提供更大安全性。安全的底线就是用户希望他们在网络上的体验越安全越好。
在这样的环境下,随着 应用日益成熟,应用发布者就需要满足用户对安全的高度需要,保证他们的产品是安全的,并且不会被用户设备上可能存在的恶意应用攻破。由于网络上的数据包括 信用卡、银行账户以及其他有价值的个人身份相关信息,风险是很高的,但是成为一个受信任的应用发布者将会得到很多回报。为你的用户发布一个安全的应用,他 们会通过他们的方式表达喜爱,他们会更加愿意使用你的应用进行交互。
3.精准定位及个性化(Targeting and personalisation)
应 用发布者对于他们的用户有了更好的理解,在2012年,应用发布者中的佼佼者将会利用他们对用户的理解来进行目标营销并为用户提供个性化体验。其中的一大 趋势就是根据用户的喜好,将特定应用在特定app stores发布。这一方法和搜索引擎营销(search engine marketing)有异曲同工之妙。
比如说,你开发了一个应用并在Google上进行推广,因为对于你的大多数关键字,Google可以有最大的搜索量。但是,你的应用的受众可能是一些总是访问其他搜索引擎的人。在这种情况下,你需要针对这些特定用户,在他们喜欢的搜索引擎上进行推广。
这个道理同样适用于app stores。找出哪个app stores可以产生最高的销售额或者某类消费者的最高终生价值,据此决定你该如何发布你的产品,并对于各个不同的商店采用合适的策略。
2012 年的另外一个机会是个性化的应用内容。由于HTML5和混合应用(native app 和 web-based app的结合)不断增加,以及用户越来越习惯于在网络浏览时收到个性化内容,他们会期待他们使用的应用同样是个性化的。这样的例子包括应用中的目标营销以 及定向服务,这些都会带来和应用相关的购买行为(in-app purchases)。
4. HTML5
有 些人可能会怀疑HTML5,认为它终究只会是昙花一现。但是,应用发布者和开发者需要了解的关于HTML5的一点是,采用HTML5开发应用,他们将免于 向app stores上交30%的用户初次购买应用的消费额以及其后与应用内部购买(in-app purchases)。
例 如,Apple完全封闭的生态系统不允许不是通过Apple的App Store发布的任何应用安装在Apple设备上,除非这个设备是“越狱”设备。这就要求应用发布者向Apple支付30%的交易额,包括购买款项、套餐 计费等。但是如果采用HTML5应用的话,Apple的用户就可以直接通过Safari浏览器找到这个HTML5应用并将这个应用装载到他们的设备上。实 际上,这并非严格意义上的装载,而是一个书签,但这看起来就跟一个典型的应用一样,可以放在设备的桌面上。
但 是,HTML5应用也并非是没有缺陷,其中一个就是能见度。HTML5的应用发布者不能指望通过app store来推广应用,所以需要更多方式来达到更大范围的推广。另外,有一些HTML5的app stores,他们将会从终端用户获得更多注意。这将帮助HTML5的应用发布者应用能见度和推广方面的挑战。
5. 应用相关的分析(In-App analytics )
由于应用市场逐步成熟以及联网用户开始越来越多地行使他们选择的权利,用户对应用的忠诚度以及用户接触到应用的可能性可能会成为应用发布者在2012年的最大挑战之一。分析可以帮助让用户更长时间地保留一个应用并持续使用它。这可以减少兼并开销并增加消费者的终身价值。
为 什么呢?因为越来越多的应用发布者都将用户根据他们的生命周期进行了货币化,并通app store的目标营销来获得客户,并个性化应用内容。应用内部的分析是其中的关键组件,可以让这些趋势持续下去,并带来收益增长。网站分析现在已经成了网 络行为洞察的实际标准,类似地,由于应用现在对于应用发布者来说就是一个在线商店,因此应用内部分析(n-app analytics)可以让应用发布者了解消费者,他们可以依赖应用内部分析来充分利用用户体验并货币化应用生命周期。
一个推广wedding DJs的广告的例子,因为在这张专辑封面出现了“婚礼教堂”的字样。随着应用内部分析的提升,将会有更好的目标营销以及个性化服务出现
应用发布者面对的2012年趋势将会快速变化,今年可能还会有更多趋势出现。尽管在考虑未来的同时满足现有需求很难,但要记住一点,在这个产业中发生的大多数事情都是由联网消费者驱动的。将消费者放在第一位是每一个应用开发者在面对各种各样的市场条件时都需要考虑的。
原文链接:Five app trends to look out for in 2012
强大的原文链接,我只做一些些解释工作。
http://kqwd.blog.163.com/blog/static/4122344820117191351263/
1 原文中使用vim,也可以使用nano(对于rd而言这也不是啥问题)
2 #!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/ dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255 printf "xc3x26x00x00" >> working /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original /bin/mv working iPhoneOS\ Build\ System\ Support chmod a+x iPhoneOS\ Build\ System\ Support
the section means that backup the file named 'iPhoneOS\ Build\ System\ Support ',dd is command in linux,if means input file,of means ouput file,printf >> means that appending string to the file named working,you can open the working (nano ./working) to check the end of the file.
3 每步操作都有备份,所以不用担心如果申请了iDP之后的问题,大不了就恢复可以了,所有的操作都只是改了一些文件的内容而已,恢复回来就可以了
4 注意ios4版本对应了armv6,因此在build setting那个里要设置好,否则编译会出问题。当插入设备后,要将其设为开发机,并且将run那个地方改为指向你连接的那个设备,此时那个archiving才能用,否则是灰的。
5 注意最后那个py脚本里面的/Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}"
my.company应该改成你项目的命名空间。
6 我在XCode4.2+itouch4(ios 4.2.1)下试验成功