学习Android Framework已有一个多星期了,对于Activity的加载始终一知半解。一直就感到疑惑的是,按“back”键后,怎么Activity的运行记录就会消失,这个机制到底是怎么一回事?
今天,花了一个上午仔细阅读官网中Tasks and Back Stack后,忽然有种豁然开朗的感觉。下面就谈谈我的理解吧,希望对大家有帮助,有错的地方还望各位看官斧正!
如上图所示,本话题主要涉及三个主体,back stack,task和activity。
其中,back stack和task是一个堆栈。而说到堆栈就离不开栈元素、栈顶、栈底、出栈和入栈。
back stack的栈元素是task,而task的栈元素是activity。处于back stack的栈底的那个task,其栈底元素就是桌面(home screen)activity。关于这点其实很好理解,因为每次我们最终退出程序以后,都会返回到桌面上。相对于栈底,就要说一说栈顶了。处于back stack顶部的那个task,他的栈顶元素activity就是用户当前正在交互的那个activity。
除此之外,栈还有一个很重要的地方就是,出栈和入栈。先从入栈说起吧,back stack每次打开一个应用程序,对会为其生成一个task,之后有关于这个应用程序的activity会会作为这个task的栈元素进行出栈入栈。但是,也不是所有的有关于这个应用程序的activity都会在一个task中,我们可以通过intent中flag和activity的affinity属性项来将某些activity从这个应用程序中划分开来。当然,通过这两个属性的设置,还可以将不同应用程序的activity划分到同一个task上。
说罢入栈,咱们再来聊一聊出栈。不知道大家有没留意到back stack这个名字。back的意思,在这里不是后备的意思,而是对应手机中的back返回按键。当我们每按一次back键的时候,处于back stack栈顶的那个task就会将其最顶的那个activity出栈。当这个task为空的时候,这个task也会从back stack中出栈。
除了出栈和入栈之外,back stack会有其他的行为。比如说,某个activity设置为singletask,意为这个activity仅会在一个task中实例化一次,如果系统需要调用这个activity实例的时候,系统中已经存在这个activity实例,那么系统就不会按照默认行为,再次实例化这个activity并将这个activity实例压入栈顶task中,而是将处于back stack中那个拥有这个activity实例的task抽出来,放到back stack的栈顶中。
以上只是我的个人见解,转载请注明出处,方便更正,谢谢!
四、Bada的系统应用基础
系统应用基础,指的是三个最基本的命名空间。
在Helloworld.h中大家看到引入了如下4个头文件:
#include <FApp.h> #include <FBase.h> #include <FSystem.h> #include <FUi.h>前三个就是应用、基础和系统命名空间的头文件。
App命名空间前面也介绍过了,下面是此空间中类关系图:
Helloworld类是继承自Osp::App::Application。
且Helloworld是应用程序的实例。
Base命名空间是基本的类型空间,类关系图如下:
而系统命名空间提供系统管理属性,比如系统时间、警告、震动、电量和设备管理。
主要的类有:Alarm、Battery、DeviceManager、PowerManager、RuntimeInfo、SettingInfo、SystemInfo、SystemTime、Vibrator以及一些相关接口。
有了这些背景知识,后面就会慢慢深入学习了。下面进入所有移动开发都会经历的重头戏--UI。
五、Bada的UI
UI这块领地向来都是各公司派重兵驻守之地。一个令人惊艳的UI和用户体验会使产品有非常棒的成绩单。比如iPhone就是如此的惊艳了一把。
同样的,Windos phone 7 的Metro界面也是与众不同,赢得了大把掌声。而Bada的UI算是中规中矩。
Bada的UI命名空间主要由五部分组成:
1、控件部分Osp::Ui::Controls,主要有Osp::Ui::Control类和Osp::Ui::Container类组成。
2、处理事件部分,Osp::Ui::ITouchEventListener处理控件的相关事件。
3、布局部分,Osp::Ui::Layout类来负责。
4、创建动画,Osp::Ui::Animations类负责。
5、剪贴板,Osp::Ui::Clipboard负责应用程序间的复制与粘贴。
Bada系统的UI层次:最底层是应用程序的Frame(容器),在Frame上面是Form。通常一个应用程序只有一个Frame,它是由Bada框架负责的,我们不用关心,而Form可以有多个,这个概念与WM或windows开发中的Form类似。再上一层就是各式各样的控件了。如下图:
在应用程序初始化时会将Form加到应用程序的Frame上:
// Create a form HelloworldForm *pHelloworldForm = new HelloworldForm(); pHelloworldForm->Initialize(); // Add the form to the frame Frame *pFrame = GetAppFrame()->GetFrame(); pFrame->AddControl(*pHelloworldForm); // Set the current form pFrame->SetCurrentForm(*pHelloworldForm); // Draw and Show the form pHelloworldForm->Draw(); pHelloworldForm->Show();Hello Bada!中用到的控件是Label和Button,这是最常使用的控件了,无论在哪个平台上。
Bada的布局是怎么样的呢?想必很多人都会关心这个问题,那么我会在下一篇文章详细介绍。
昨天我做客速途网公开课,主要跟大家分享了自己在移动互联网产品推广方面的一些经验,今天我将昨天课程的主要内容做一个总结,希望对于在移动互联网领域创业的朋友们能够有所帮助。
首先想说的是,没有最好的推广手段,只有最合适的推广策略。
经济学上有一个一般均衡理论,其实我看了,一般均衡理论同样适用于网络营销领域。从长远来讲,任何一种网络营销手段,只要长期存在,那么它最终的投入产出比一定是趋于相等的。如果又一个手段效果突出,那么大家就会都将资源投过来,导致竞争加剧,最终成本上升,效果变差。
但是在一个好的推广手段刚出来时,它的投入产出比是可以超过平均水平的,因为由于手段新,使用还不普遍,比如过去的SEO,比如现在的ASO。但是我们要有一个认识,那就是即使现在效果好的手段,长期来讲效果也总会变差的,所以,一定不要寄希望于单一的推广手段。
真正重要的是营销策略,一个好的产品定位及优秀的营销策划,才是产品推广取得成功的关键所在。但是好的营销策划,就可遇不可求了,不但考验营销人的经验、资源,还要有很强的创新精神及过硬的营销团队。当然不是说我们就做不出好的营销策划,但是这不是我今天要讲的主题,我要讲的是移动应用的主要推广手段,至于最终这些手段怎么组合,怎么形成整体的营销策略,就要看大家自己了!
首先要跟大家强调的是,应用市场是当前移动应用最主要的分发渠道。这当然是众所周知的,也正因为如此,应用市场的推广竞争非常激烈。总体上来讲,移动应用的推广手段主要有以下几种。
1.将你的应用发布到市场。
这是一切推广手段的基础,也是最容易被大家忽略的一点。有人问我,只发布就行吗?移动应用不像网站,网站数以十亿计,你做一个网站,不推广不会有人看。但是移动应用,总的数量才几十万,而用户有好几亿,单个分类下的应用数量还是相对较少的,这种情况下,只要你发布,就一定能给你带来下载。尤其要提醒安卓平台的开发者,中国的第三方安卓应用市场的下载量是远高于谷歌市场的,所以你一定不要以为将产品发布到谷歌市场就OK了,一定要多发布,你发布的市场越多,你的展现机会就越多。如果你发布五十个市场,每个市场每天给你带来一个下载,一个月就是一千五百的下载了!你觉得没有价值吗?
2.应用市场的活动合作及广告投放。
现在国内的第三方市场商业化很厉害,推荐软件、最新软件、装机必备等等,甚至连本周最佳应用、猜你喜欢都是可以投放广告的位置,另外很多市场都提供首发活动的合作,这些应用市场的付费推广效果都不错,但是价格也不菲。这些我不多讲,大家找到各大市场的商务合作经理,要一份广告刊例价格表就一目了然。我想提醒大家的是,无论是广告投放还是和市场合作,一定要注意移动应用的榜单效应。这在我另一篇专栏里有介绍,大家可以去看一下。
3.ASO(App Store Optimization)
ASO是最近开始热起来的一个概念,指的是通过一定的优化手段,提高应用在用户搜索结果页面展示率的技术。从低成本的角度来讲,ASO是相当好的一种推广手段,强烈建议大家在合理的范围内做好ASO。营销ASO效果的因素很多,比如应用的名称、简介、描述、截图、甚至是图标等等,具体大家可以参看我之前在互联网观察者博客的一些文章,有详细的解读。
4.流量互换
基本上所有的应用市场都提供了流量互换的合作方式,你能给他带来用户,它便帮你推荐应用。但是实际上流量互换不仅限于跟应用市场的合作,大家还可以通过各种渠道找到希望交换流量的应用开发者,实现合作共赢。
5.广告投放及手机预装
不只是应用市场的广告投放,现在已经有越来越多的针对移动端的广告平台。但是不管是CPA还是CPC,根据我的经验,在没有很好的产品定位及营销策略的情况下,单个激活用户的成本基本都在2块以上了,不是财大气粗的话,还是很难承受这样的推广成本的。手机预装的价格则更高,低则三四块,高则五块以上。重点是你舍得花钱都不一定有手机厂商愿意预装,对你的产品质量还是有较高的要求的。
此外,传统互联网的推广手段也非常重要。应用市场是当前移动应用的主要分发途径,但是大家要注意,用户下载应用主要通过手机市场,但是用户获取应用的信息却还是很依赖传统互联网的,因此,传统互联网的推广手段很多还是很奏效的。
1.首先是搜索营销
基于搜索引擎的SEO、SEM大家都能想到,但是这里讲的搜索营销不只是搜索引擎营销,其实大家应该明白除了搜索引擎之外,现在几乎任何网站都有搜索框,只要有搜索,就会有算法,只要有算法,就可以有针对性的进行优化。比如刚才讲的ASO、比如在论坛搜索结果页的展示优化等等。只要你的关键字分析做到位,就可以收到很好的效果。
2.论坛营销
论坛营销也是在移动应用的推广中常见的推广手段。除了付费的论坛活动、置顶帖之外。论坛还是草根开发者进行低成本应用推广的一个非常好的途径。但是在论坛的推广中,大家要注意,不要一上来就发广告,且不说版主对你的删帖和封杀操作,单纯的广告贴有多少用户会浏览呢?在论坛营销中,最重要的是你要跟大家先打成一片,先谈交情,再谈买卖!
3.软文推广
可能有朋友说软文推广主要是为了做市场宣传,实际上不然,软文可以有很多作用。首先,软文发到大型网站,如果文内可以加外链,这首先是SEO方面一个不错的外链来源,另外这些文字本身会有一定权重,有针对的起一个文字标题,没准也能获得不错的流量。其次,软文可以辅助事件营销和病毒营销,起到追踪和加深事件传播效果的作用。最后软文还有大家都了解的市场宣传和品牌推广的作用。
4.百科和问答推广
百科就不多讲了,建议大家在将应用发布到市场的同时,也要在百度百科等网站创建词条,这是很好的免费宣传途径。至于问答推广,现在越来越难做,百度查广告越来越严格,但是据我的观察,现在腾讯、360等公司在问答里的推广投入还是比较大的,大家可以去百度知道里观察一下。
5.社会化媒体营销
这里重点讲以下微博,很多朋友都把微博作为一个广告发布的平台来做,买一些粉丝,发一些广告,敢问你这不是在自己玩自己吗?微博营销的本质是沟通互动。微博的主要作用在我看来有两个,一个是挖掘客户,另一个是追踪服务。除此之外的微博营销活动,要不就是大公司的市场宣传,要不就是无稽之谈。
因为篇幅有限,我只是将各种推广手段做了一个罗列,感兴趣的朋友可以去看一下我课程的视频回放,可能能更好的理解我的营销观点。此外,除了了解各种推广手段,大家一定要制订一个好的推广时间表,组建一个可靠的推广团队,只有这样,你的推广工作才能取得成功。
最后,再次强调一遍,没有做好的推广手段,只有最适合的营销策略!