-
1.1 Android平台一日游
- 观赏Android王国全景图
- Android vs Iphone
-
Android常用组件
- Activity
- Intent
- Service
- Content Provider
- Android开发工具
- 参观Android王国的金矿
-
1.2 搭建Android开发环境
- Android SDK安装
- ADT的安装和配置
- Android模拟器的配置
-
1.3 say_hello_to_Android
- 创建一个Android应用程序的步骤
- Android应用程序目录结构
- AndroidManifest.xml文件的作用
- Android相关资源文件的作用
-
1.4 Activity初步
- Activity的主要作用
-
创建一个Activity的方法
- 一个Activity就是一个类,并且这个类要继承Activity
- 需要override onCreate方法
- 每一个Activity都需要在AndroidManifest.xml文件当中进行配置
- 为Activity添加控件
- 在AndroidManifest.xml文件中注册 应用Activity的方法
- 在Activity当中添加控件的方法
-
1.5 Activity和Intent
- 多个Activity之间的关系
-
Intent的基本作用
-
Intent是一个对象
- Component name
- Action
- Data
- Category
- Extras
- Flags
-
启动另外一个Activity,并传递数据
- intent.setClass(currentActivity.this, targetActivity.class
- 发送消息
-
在一个Activity中启动另外一个Activity的方法
- currentActivity.this.startActivity(intent)
-
使用Intent在Activity之间传递数据的基本方法
- 发:intent.putExtra
- 收:intent = getIntent ()
-
1.6 Android当中的常见控件
-
TextView的使用方法
-
.java
- TextView.setText(R.string.xxx)
-
EditText的使用方法
-
.java
- EditText.setText(R.string.xxx)
-
Button的使用方法
-
.java
- Button.setOnClickListener(new newButtonListener( ) xxx );
-
Menu的使用方法
-
.java
- onCreateOptionsMenu( )
- onOptionsItemselected( )
-
RadioGroup和RadioButton的使用方法
-
.xml
-
<RadioGroup> </RadioGroup>
- <RadioButton xxx />
- <RadioButton xxx />
- <RadioButton xxx />
- .....
- <RadioButton xxx />
- 这是一个RadioGroup
-
.java
- RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() xxx );
- RaidoButton.getId() 可以获得这个button在group中的id
-
CheckBox的使用方法
-
.java
- CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() xxx );
-
Toast的基本用法
-
.java
- Toast.makeText(Activity.this, "Text", Toast.LENGTH_LONG).show();
-
ProgressBar的使用方法
-
.xml
- style="@android:style/Widget.ProgressBar"
- android:visibility="gone"
-
.java
- PorgressBar.setVisibility( )
- PorgressBar.setProgress(int progress)
- PorgressBar.setSecondaryProgress(secondaryProgress)
- ProgressBar.setMax(max)
- ProgressBar.getMax( )
-
ListView的使用方法
-
.xml
-
list的布局文件
- <ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical">"
</ListView>
- list中元素的布局文件
-
.java
-
Override ListActivity.onCreate()
- ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
- HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("user_name", "zhang3");
map1.put("user_ip", "192.168.0.100");
list.add(map1);
- SimpleAdapter listadapter = new SimpleAdapter(this, list, R.layout.fifth_02, new String[]{"user_name", "user_ip"}, new int[]{R.id.user_name, R.id.user_ip});
- setListAdapter(listadapter);
-
Override onListItemClick()
- super.onListItemClick(l, v, position, id);
-
1.7 Activity生命周期
-
生命周期函数
- onCreate
- onRestart
- onResume
- onPause
- onStop
- onDestroy
- 概要
- 概要
-
Task基本概念
- A task is a stack of activities
-
Task运行的过程
- 应用程序的启动作为Task的起点,并压栈
- 后续Activity压栈
- Android始终显示Stack顶元素
- 顶部Activity弹栈
-
Activity和Task之间的关系
- All the activities in a task move together as a unit
-
对话框风格Activity的使用方法
- 在AndroidManifest.xml的<activity>中加入android:theme="@android:style/Theme.Dialog"
-
1.8 Activity的布局初步
-
LinearLayout的使用方法
- android:orientation
- android:layout_weight
-
TableLayout的使用方法
-
android:stretchColumns
- 设置表格的列是否拉伸
- android:layout_column
-
android:shrinkColumns
- 设置表格的列是否收缩
-
android:collapseColumns
- 设置表格的列是否隐藏
-
RelativeLayout
-
相对布局的基本概念
- 用控件的相对位置关系布局
-
相对布局与其他布局的区别
- 其他方式是绝对布局
-
相对布局常用属性
- android:layout_above
- android:layout_below
- android:layout_toLeftOf
- android:layout_toRightOf
- android:layout_alignParentTop
- android:layout_alignParentBottom
- android:layout_alignParentLeft
- android:layout_alignParentRight
- android:layout_marginLeft
- android:layout_marginRight
- android:layout_marginTop
- android:layout_marginBottom
-
1.9 Handler的使用
-
Handler的基本概念
- 负责发送和处理消息
-
Handler基本使用方法
-
.java
- Handler handler = new Handler();
Runnable updateThread = new Runnable(){
public void run(){
hadler.postDelayed(updateThread, 1000)
}
-
使用Handle更新ProgressBar
-
.java
- FourthActivity.java
-
Handler与线程
- Handler与调用它的Activity处于同一线程,
在原有的线程中,调用run()方法
-
Java启动线程方法
-
Thread类方法
- Thread t = new Thread();
- t.start()
- 不能同时运行同一个Thread的start()方法,
VM会报错,提示说Thread已经在运行状态
-
Runnable接口方法
- Runnable r = new Runnable() {
public void run() {
xxx;
}
}
new Thread(r).start();
- class myThread implements Runnable(){
public void run() {
xxx;
}
}
Thread(r).start();
-
使用Thread和Runnable共享线程间数据的方法
- thread_test.java
- runnable_test.java
-
Bundle的用法
-
Bundle与Hashmap的区别
- 可以看成是一种特殊的Hashmap类型,因为Hashmap在键值匹配时,
可以是任意数据类型,也就是Object类型;
但Bundle的键只能是String类型,而值的类型也是有限的
-
Java中byte, char与String的区别
-
byte, char, String的基本概念
- byte 是字节,char 是字符 string 是字符串
两个字节构成一个字符,多个字符构成字符串。
byte[] b = new byte[1024];
char a = 'a';
String string = new String("fgerg");
-
Java中char的特殊性
- char 在java中是2个字节。java采用unicode,
2个字节(16位)来表示一个字符。
- 例:
char x = '我';
String str = "我";
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢?
3个byte一共是3*8=24位; 那么char x 怎么又放得下?因为char是16位?
原因:
byte[] bytes = str.getBytes();之后是3个字节,这里和前面的概念不一样。
java是用unicode来表示字符,"我"这个中文字符的unicode就是2个字节。
String.getBytes(encoding)方法是获取指定编码的byte数组表示,
通常gbk/gb2312是2个字节,utf-8是3个字节。
如果不指定encoding则取系统默认的encoding。
-
Java将字符串转成int型的方法
- String s;
int a = Integer.parseInt(s);
-
Looper
- 循环从队列中取得Message
-
如果将Looper放在一个线程中,那么它将在Message queue中有Message的时候,
一个接一个的去取Message;如果没有Message的话,线程就进入休眠状态
- class LooperThread extends Thread {
public Handler mHandler;
public void run() {
//启动looper
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
-
HandlerThread
- 这是一个继承自Thread的类。
它的作用模式:先启一个含有looper的线程,然后这个looper创建一个handler
因为父类是Thread,所以必须调用start()方法
-
发送/接收消息的方法
- Handler handler;
handler.sendMessage(msg) -- 发
Message msg = handler.obtainMessage() -- 收
- Message msg;
Handler handler;
msg.sendToTarget() -- 发; 目标是生成msg的Handler对象
msg = handler.obtainMessage() -- 收
-
在新线程当中处理消息的方法
-
Handler的同步与异步
-
Handler的同步与异步是针对发送Message
和接收Message是否是在同一个线程中的
- 同步
- 使用Handler的post(Runnable)方法
缺点:它将收发都放在同一个线程中,可能会造成等待时间过长
优点:post(Runnable)可以反复执行,不会出现像Thread.start()方法使用多次的错误情况。
- syncHandler.java
- 异步
- 使用HandlerThread与Looper的方法
缺点:
优点:异步,用户体验效果好
- asyncHandler.java
- 使用new Thread(Runnable).start(),这种方法如果反复调用,会创建多个不同的线程,
但是会共享Runnable中的数据,所以是一种很浪费资源的异步方式。非常不推荐
- 1. 在layout中添加控件;2. 在Activity中用过使用FindViewById取得控件;3. 设置控件