发现实在是没有写笔记的习惯,每次都是写了一点后就没兴趣继续写下去了。随便摘抄点好了。
Activities and Tasks
task是一组相关的Activities,保存在一个堆栈中,给用户的感觉就是一个应用程序。简单的理解就是,每开一个新的Activities,就将Activities放到堆栈的最上面,按下back后就将当前Activities移除,激活堆栈上的下一个Activities。
Affinities and new tasks
其实我没太明白affinity的含义,在我看来似乎affinity有点类似taskId,标示它应该属于哪个task。
Launch modes
启动模式总共有四种
- "standard" (the default mode)
- "singleTop"
- "singleTask"
- "singleInstance"
Clearing the stack
默认情况下,如果用户长时间离开Task,系统会清理掉除ROOT Activity外的所有Activities。这个做法的依据是,如果用户太久没回来,用户肯定已经忘了自己最初做了啥,回来肯定是要做一些新事情。当然我们可以通过给activity设置一些属性来改变这个行为,比如alwaysRetainTaskState等。
Starting tasks
当需要一个activity作为整个应用程序的进入点时,我们给它一个intent filter,其中action为 "android.intent.action.MAIN",category为"android.intent.category.LAUNCHER"。这种filter使得一个图标和一个标签显示在程序启动器中,使用户可以启动该task或者返回到该task。
Processes and Threads
同一个application都运行在同一个Processes里面。
为了保证Activity界面不阻塞,耗时工作应当放到Thread中。
Android有提供一个轻量级的RPC机制。
Activity lifecycle
Activity有三种基本状态:
- active 当前活动窗口
- paused 被其他窗口挡住部分
- stopped 被完全挡住,在系统需要回收资源的时候会被kill
activity在进行状态切换的时候会触发相应的方法
- void onCreate(Bundle savedInstanceState)
- void onStart()
- void onRestart()
- void onResume()
- void onPause()
- void onStop()
- void onDestroy()
Service lifecycle
一个service有以下两种用法
- service启动后由service自己或其他人关闭。
- 模块通过接口连接service(bindService() ),在调用unbindService()后关闭。
Broadcast receiver lifecycle
一个broadcast receiver只有一个回调方法:
void onReceive(Context curContext, Intent broadcastMsg)
broadcast receiver只有在执行onReceive的时候被认为是激活的。
当一个广播消息的响应非常耗时间时,需要新建一个新的线程来运行该操作。如果onReceive()创建了这个线程并返回,则整个进程,包括新创建的线程会被认为是非活动的(除非有其它的component为活动的),该线程有可能会被kill掉。解决方案是用onReceive()启动一个 service并让该service完成这个工作,那么系统直到这个进程仍然是活跃的。
END
到这里Android的基础知识也了解得差不多了,接着就该进军UI了。
Android的UI编程,主要注意的是:界面在XML中定义,为XML中的界面元素生成唯一的ID,并保存在自动生成的R.java中。程序中通过id查找相关界面元素,实现和界面的关联。除此之外的开发,和传统的java swing啥的没太多区别。
下面考虑写个简单的Android应用,一边学习,一遍实践。