标签归档:android

[Android]标准体重

很早之前就想写个手机APP。之前想写个类似豆瓣客户端的东西,因为我认为手机APP更多的要和网络结合才有价值。
最终写APP的事一直没有真正付诸行动。最近想还是写个最简单的好了,也算是给自己一些鼓励。

标准体重 一个计算BMI指数的应用。算是Android的开发作业,功能非常简单。代码没有写的很规范,没好意思放到GitHub。

下载地址: bmi.apk.zip

注: BMI指数(身体质量指数,简称体质指数又称体重指数,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。

douban的Android客户端

最近想给Android开发一个小应用,找了一些Android应用来做参考。感觉豆瓣客户端挺有意思。

豆瓣为小组、活动等功能开发了独立的客户端。在使用的时候有时候会在APP里直接调用douban的WEB站点或是WAP站点。Facebook放弃HTML5被看成是原生APP的一次巨大胜利。但是WEB APP在跨平台以及开发的便捷性方面都有着一定的优势。在人力资源不是太过充足的情况下采用原生+WEB的开发模式可能是个不错的选择。

在用户使用频繁对用户体验要求高,性能敏感的地方使用原生开发。一些相对简单的页面直接使用WebView即可达到原生应用同样的体验,对这些页面直接使用HTML开发。还有些用户不太常用的功能在前期可以先调用WEB版的原始页面。

PS:

  • 就目前而言用HTML5开发移动应用很难提供很好的用户体验。但我相信技术在发展,HTML5还将是趋势,主要问题还是时间,2年?
  • Android手机上Metro风格的应用越来越多了。苹果将模物化设计做到了极致,接下来是Metro设计极简的逆袭?

Android开发学习笔记(Android基础知识)

发现实在是没有写笔记的习惯,每次都是写了一点后就没兴趣继续写下去了。随便摘抄点好了。

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应用,一边学习,一遍实践。

Android开发学习笔记(Reloaded)

深入浅出Android这书看到“解读程序流程”这部分的时候,我开始明白这确实是本烂书彻底的烂书。里面居然开始解释java程序的结构,啥是import之类的东西。一个人如果连java是啥东西都不做到应当也没必要看啥android开发。不过还在这书够薄,且凭借母语优势,我还是很快的把余下的内容给翻了一遍。感觉差不多可以照葫芦画瓢了,但对具体细节依旧是一头雾水。看来老老实实的看sdk自带的文档才是正道。

Android的开发者网站挂了,不过好在SDK里已经带了相关文档。

具体见:

/android-sdk-windows/docs/guide/topics/fundamentals.html

本着有中文尽量看中文的原则,先到网上找了找是否有Application Fundamentals的中文翻译。似乎已经有不少人做过了翻译,其中这篇翻译得比较完整http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f

Application Components

Android程序比较特别,它不象大多程序一样有主入口。它是以“Application Components”为单位的,每个Components都是可以独立运行的。

系统中有四种Components:

  • Activities 主要用来处理用户界面(窗口)。
  • Services 后台运行组件,有点类似windows的后台服务。
  • Broadcast receivers 广播消息接收组件,比如电池没电,来电话啥的。
  • Content providers 用来处理各个application之间的公共数据存储,可以用来程序之间通信啥的。

Intent

content provider在接收到ContentResolver的请求时被激活,其他三种Components需要通过被称为intents的异步消息激活的。一个intent是一个Intent对象,它保存了消息的内容。

组件的关闭

Content providers和Broadcast receivers由android管理,通常不需要手动关闭。

The manifest file(AndroidManifest.xml)

应用程序配置文件,配置有该有用的组件信息,资源信息,以及权限信息。在android启动一个应用程序的component之前,它必须知道这个component的存在。因此,应用程序在manifest文件中声明了它的component。

Android开发学习笔记(程序目录结构及基本概念)

选定《深入浅出Android》作为入门资料,同时还需要找个开源项目做参考以加深学习。虽然ADT本身有带不少例子,但我还想找个复杂点的例子。曾在java上看到javaeye android客户端开源的消息,于是就不费心去找其他的例子了http://code.google.com/p/javaeye-android-client/

先创建一个新的Android主要目录如下

|~gen/ 系统自动生成的文件
| `~com/
|   `~haoluobo/
|     `-R.java
|~res/ 资源文件,图片以及界面描述等xml文档
| |+drawable-hdpi/
| |+drawable-ldpi/
| |+drawable-mdpi/
| |~layout/ 界面布局的描述文件
| | `-main.xml
| `~values/
|   `-strings.xml 字符串常量
|+src/ java代码

Android的界面虽然可以完全用java代码完成,但使用XML定义界面使界面和实现代码分开,更有利维护。且ADT提供了界面预览功能,可以直观的看到界面效果。

界面使用XML定义后,界面元素和java代码又要如何交互?所以就有了系统自动生成的R.java这个java类。ADT会在R.java里为XML里的界面元素创建对应的ID(int类型的常量)。根据元素类型的不同,常量保存在不同的子类中。这里说得有些不明白,直接上代码。

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }

…….

java代码里要获取对应的页面元素使用如下的方法

usernameField = (EditText)findViewById(R.id.username_field);

Android开发学习笔记(环境准备,学习资料收集)

前言

iPhone推出后,移动终端的能量似乎被一下引爆,android的加入使这个市场更加繁华。智能设备的开发也一下子变得流行起来。

作为一个开发人员,还是很想了解尝试一下智能设备的应用开发。本想试试iPhone,无奈我没MacBook也没iPhone,只能退而求其次选了android。

环境准备

如果你只是学习android开发,那有台PC就够了,并不需要去真正买台android设备。

网上关于android的开发环境配置的文章已经够多了,这就不多废话。

具体参考:http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx

这里要注意的几点:

  • 使用SDK Setup.exe安装的时候很可能会无法连接成功。选择Settings->Force https:// …http://。将连接类型由https改成http。
  • 如果修改过用户目录,会导致创建的AVD无法启动。需要将.android目录复制到C盘的用户目录,比如:C:\Users\vicalloy\.android
  • http://developer.android.com/ android的开发者网站悲剧的被墙了,需要自行翻墙

参考资料

开发环境准备好后,就要开始搜罗学习资料了。

具体的学习笔记

太晚了,改天补上……