【1】Activity的生命周期
Activity作为android系统的表现层组件有着至关重要的地位,因为他直接和用户接触。一个Activity在被创建和销毁的过程中经历了7个过程,他们分别是oncreat(activity创建后第一个被调用的函数),onstart(当activity显示在界面上的时候被调用),onrestart(从停止到活动调用),onresume(能够和用户进行交互的时候调用),onpause(进入暂停态的时候被调用),onstop(进入停止态的时候被调用),ondestroy(进入非活动状态前被调用)。
假如说我们要在某个activity载入的时候做一些工作,那我们可以重载他的oncreat函数,像下面这样:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); baseSetContentView(R.layout.login_activity_layout); initHttpHandler(); initView(); }
上面的initHttpHandler()和initView()是我们加上去的,这样系统在创建这个activity的时候就会调用他们。
【2】初始化界面资源
安卓的界面资源用xml语言描述,xml语言很适合用来组织 key-value 形式的数据。界面资源说白了也就是一堆描述性的文件,比如:界面元素的名字,大小,位置等等。我们要想在程序里面更该或者是获取界面元素就得做一些初始化的工作,也就是给这些元素取一些别名。比如像下面这样的:
ImageButton logbutton=(ImageButton)findViewById(R.id.imageButton1);
我们在程序里面定义一个叫logbutton的对象,实际上就是对界面资源里面的登录按钮做了引用。这样我们就能在程序里面通过logbutton对象来操作登录按钮。
注意,定义这个对象要在 setContentView(R.layout.activity_main) 之后。
这里还有值得熟悉的是安卓常用的界面设计基础知识,因为我们常要适应不同屏幕尺寸的手机所以在界面布局方面为了兼顾美观和适应性一般采用相对布局方案。
// 相对于给定ID控件
android:layout_above 将该控件的底部置于给定ID的控件之上;
android:layout_below 将该控件的底部置于给定ID的控件之下;
android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘对齐;
android:layout_alignBaseline 将该控件的baseline与给定ID的baseline对齐;
android:layout_alignTop 将该控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom 将该控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft 将该控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight 将该控件的右边缘与给定ID的右边缘对齐;
// 相对于父组件
android:layout_alignParentTop 如果为true,将该控件的顶部与其父控件的顶部对齐;
android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;
android:layout_alignParentLeft 如果为true,将该控件的左部与其父控件的左部对齐;
android:layout_alignParentRight 如果为true,将该控件的右部与其父控件的右部对齐;
// 居中
android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;
android:layout_centerVertical 如果为true,将该控件的置于垂直居中;
android:layout_centerInParent 如果为true,将该控件的置于父控件的*;
// 指定移动像素
android:layout_marginTop 上偏移的值;
android:layout_marginBottom 下偏移的值;
android:layout_marginLeft 左偏移的值;
android:layout_marginRight 右偏移的值;
example:
android:layout_below = "@id/***"
android:layout_alignBaseline = "@id/***"
android:layout_alignParentTop = true
android:layout_marginLeft = “10px”
【3】注册控件监听事件
为了监听用户的动作,我们必须注册监听函数。常用的监听函数有 setOnClickListener()setOnFocusChangeListener() addTextChangedListener() 以及触摸事件。
监听注册有好几种写法,这里推荐一种统一处理函数的写法。即实现相应Listener的接口,注册控件的事件,重载里面的响应事件。比如说buttom的onclick()函数。
public class MainActivity extends ActionBarActivity implements OnClickListener
实现接口
Button log_button=(Button)findViewById(R.id.button1); log_button.setOnClickListener(this);
注册事件
@Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "log", Toast.LENGTH_LONG).show(); Intent intent=new Intent(MainActivity.this,MenuActivity.class); startActivity(intent); }
重载事件
【4】Activity之间的跳转
界面之间的跳转是app中非常重要的环节,通过intent机制从一个activity启动另一个activity很简单,代码如下:
Intent intent=new Intent(MainActivity.this,MenuActivity.class); startActivity(intent);
这是显式启动一个activity,还有隐式启动,子启动。
【5】handle消息机制
handle消息机制是安卓里面重要的进程间通信的方式,通过handle我们可以轻松的发送消息给指定的目标。
发送方:
Message msg = handler.obtainMessage(); msg.what = MessageCode.RESIZE; msg.arg1 = change; msg.sendToTarget();
接收方需要重载handleMessage函数
//接受处理信息函数 @Override public void handleMessage(Message message) { LoginActivity theActivity = mActivity.get(); if(theActivity == null) return; //接收到登录消息 if(message.what == MessageCode.LOGIN)
【6】数据的存储
安卓存储数据有5种方式,他们分别是:
1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
其中SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。 它是什么样的处理方式呢? SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
实现SharedPreferences存储的步骤如下:
1 据Context获取SharedPreferences对象
2 edit()方法获取Editor对象。
3 Editor对象存储key-value键值对数据。
4 commit()方法提交数据。
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取SharedPreferences对象 Context ctx = MainActivity.this; SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE); //存入数据 Editor editor = sp.edit(); editor.putString("STRING_KEY", "string"); editor.putInt("INT_KEY", 0); editor.putBoolean("BOOLEAN_KEY", true); editor.commit(); //返回STRING_KEY的值 Log.d("SP", sp.getString("STRING_KEY", "none")); //如果NOT_EXIST不存在,则返回值为"none" Log.d("SP", sp.getString("NOT_EXIST", "none")); } }