Category Archives: Mobile Dev

Android进程的优先级

Android Runtime在资源紧张时会杀掉一些进程。 优先级低的进程就被首先杀掉。 进程的优先级取决于它们的状态,优先级从高到低排列是: 1. Foreground process   — 正在与用户交互 2. Visible process      — 可见,但不能交互,比如进程里的Activity被部分遮挡 3. Service process      4. Background process   — 无交互、不可见、也不是Service 5. Empty process        — 进程被回收后会保存在内存中,作为缓存(下次启动时可以快一点)

Android Runtime 资源回收的单位是Activity还是Process ?

Android Runtime要回收资源时,倒底是弄掉可回收的Activity, 还是直接杀掉Process ? According to Google’s Documents: 引用 If an activity in the foreground of the screen (at the top of the stack), it is active or running. If an activity has lost focus but is still visible (that is, a new non-full-sized or transparent activity has focus on top of your activity), it […]

android使用的java语言规范的版本跟原生Java的版本没有对应关系

android 4所支持的JAVA语法是否兼容JAVA6的语法 ?  只能说大体上是,但没有明确说法;事实上,两者的版本没有对应关系。 说得更极端一点,android目前没有为自己所用的java语言提供版本机制: 引用 "java.version" property returns 0 because it is not used on Android, "java.specification.version" invariably returns 0.9 independently of the version of Android used, "java.class.version" invariably returns 50 independently of the version of Android used, 参考: http://en.wikipedia.org/wiki/Comparison_of_Java_and_Android_API#System_properties

Android UI的一些基本概念

Activity:  相当于窗体 View:  相当于控件. View使用了Composite模式, 所以 ViewGroup – 用来组合View的东西,也是一种View. 比如Layout本身也是View. Fragment: 可以视为一种特殊的Activity, 但它只能被包含在其他Activity中。 相当于PHP/JSP中被<inclue>的page.

android的进程倒底有没有退出?

android强调activity, 弱化了进程的概念。 按返回键退出activity时,除非显式在onDestroy()方法里使用System.exit(0),否则进程并不会退出,而是驻留在后台 (未必会出现在运行列表里)。 当你重新进入某个程序时,系统把后台程序直接推到前台,减少重建进程的开销,让用户获得比较快的启动体验。 可是如果程序驻留过多,内存会不会浪费甚至耗尽?  系统看内存有点紧张时,会自动杀掉一些里程;当然系统在这方面做的并不完美,驻留程序多了,手机还是会卡的。作为开发者,最好还是提供显式退出功能。

Android开源项目研究: last.fm android的用户认证

概述 last.fm android的认证机制与cookie类似,但与cookie无关。 类似于OAUTH,它也有appKey/appSecret体系,以允许第三方开发者开发应用;然而,这个体系跟OAUTH没有任何关系,last.fm android这个APP也跟第三方开发者没有什么关系。 登录、认证流程 1. 用户输入用户名、密码 2. 客户端把用户名、密码经加密处理后传给服务端,服务端认证通过后,返回一段XML;客户端再把这个XML反序列化为一个JAVA对象:fm.last.api.Session. 这个对象包含userName和一个token(代码中称为sessionKey) 3. 客户端会把对象中的 userName和sessionKey存入到settings中 (SharedPreference) 4. 同时还会把这个Session对象作为一个全局变量放在内存中,相当于setting中所存session信息的缓存 5. 后续的访问中,如果客户端需要表明身份,则会传入sessionKey; 服务端会通过sessionKey来判断该请求是否代表合法的用户。 整个过程类似于服务端返回一个cookie, 客户端在后续请求中发出cookie . 如何记住登录 启动后,在LastFMApplication这个activity的onCreate()中会 去settings中取出已登录的userName和sessionKey ,然后封装出Session对象,作为全局变量放到内存里;接下来直接进入LastFm Activity或Profile Activity,整个过程并没有网络交互。 服务端并没有校验,是不是有安全漏洞? 如果我在首次登录后,把用户名换成另一个人的,就不是可以这个人的身份操作本APP? 答案是:你只能成功进入LastFm和Profile,但无法继续以受害者的身份进行操作;因为在后续的业务数据访问请求中,还是要附带上sessionKey,服务端会根据sessionKey找出你的真实身份。 登出时的行为 登出时会把内存中的Session全局变量置为NULL,并去settings中把userName和sessionKey清除。 这就类似于浏览器中的cookie清除 . 具体使用的通信协议 1.走的是http , 直接用HttpURLConnection;  API叫 Parser.getItem(url, params, …) 2.用了https,但不校验任何证书(方法名:trustAllHosts()) 附:加密的细节信息 String md5Password = MD5.getInstance().hash(pass); //一次哈希 String authToken = MD5.getInstance().hash(user […]