胡凯

Android Notes(05) - Tasks and Back Stack

| Comments

  • 所有的activities都归属于一个task。
  • 一个task包含了一些activities,这些activities以用户与他们的交互前后为顺序存放在task中。
  • Tasks可以把activies放置在background并且保存每一个activites的状态,以便于用户可以切换到其他task而不至于丢失之前的活动状态。

要点概述

一个程序通常包含了多个actvities。每一个activity都应该围绕用户需要执行的一个特定功能而进行设计,并且可以启动其他的activites。例如:一个邮件程序应该拥有一个显示新邮件的列表。当用户选择其中一封邮件,一个新的activity将打开用来显示邮件内容。

Android Notes(04) - Intents and Intent Filters

| Comments

Intent与Intent Filter

Android其中的三大组件,Activity,Service与broadcast receivers是通过Intent来触发彼此的。Intent本身会携带一些信息,它是一种组件内部或者组件间进行交互的中介。
对于不同的组件之间有着不同的机制:

  • 一个Intent对象通过Context.startActivity()或者Activity.startActivityForResult()来启动一个activity或者让已经存在的activity做一些更新的操作。
  • 一个Intent对象通过Context.startService()来初始化一个Service或者给已经在运行的Service传递新的指令。同样的,对于Context.bindService()是一样的道理。
  • Intent对象通过broadcast的方法(例如Context.sendBroadcast(), Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast())传递给那些感兴趣的broadcast receivers.

Android Training - 代码性能优化小技巧

| Comments

Performance Tips

这篇文章主要介绍一些小细节的优化技巧,虽然这些小技巧不能较大幅度的提升应用性能,但是恰当的运用这些小技巧并发生累积效应的时候,对于整个App的性能提升还是有不小作用的。通常来说,选择合适的算法与数据结构会是你首要考虑的因素,在这篇文章中不会涉及这方面的知识点。你应该使用这篇文章中的小技巧作为平时写代码的习惯,这样能够提升代码的效率。

通常来说,高效的代码需要满足下面两个原则:

  • 不要做冗余的工作
  • 尽量避免执行过多的内存分配操作

在优化App时其中一个难点就是让App能在各种型号的设备上运行。不同版本的虚拟机在不同的处理器上会有不同的运行速度。你甚至不能简单的认为“设备X的速度是设备Y的F倍”,然后还用这种倍数关系去推测其他设备。另外,在模拟器上的运行速度和在实际设备上的速度没有半点关系。同样,设备有没有JIT也对运行速度有重大影响:在有JIT情况下的最优化代码不一定在没有JIT的情况下也是最优的。

为了确保App在各设备上都能良好运行,就要确保你的代码在不同档次的设备上都尽可能的优化。

避免创建不必要的对象

Android Notes(03) - Process and Thread

| Comments

当程序的第一个组件开始启动时,Android系统会为这个程序启动一个新的Linux进程。默认的,程序中的后续其他组件都是运行在这个进程的线程中(这个线程被成为”主”线程:main thread)。如果程序的组件在启动时发现已经存在这个程序的进程了(因为其他组件正在运行), 那么这个组件将启动在该进程中,并使用同一线程。然而,你可以安排程序中的不同组件运行在另外一个进程中,而且你可以为任何进程创建其它的线程。

Process:进程

默认的,同一程序的所有组件都是运行在一个Proces里面的,并且大多数程序都不应该去改变这一规则。然而,如果你需要控制某一确定的组件的Proces,你可以在manifest文件中做特殊设置。Music播放器的Playback Service就可以这样做