一、创建shortcut(桌面快捷方式)
二、使用WeakReferenceHandler来避免内存泄露
private static class MyHandler extends WeakReferenceHandler<WelcomeActivity> {
public MyHandler(WelcomeActivity reference) {
super(reference);
}
@Override
protected void handleMessage(WelcomeActivity reference, Message msg) {
Intent intent = new Intent(reference, LoginActivity.class);
reference.startActivity(intent);
reference.finish();
}
}
三、在layout布局文件中使用<include/>标签引用之前写好的布局,使用<ScrollView/>做屏幕适配,并且在<ScrollView/>中fillViewPort标签元素的使用(使得ScrollView中的布局可以撑满ScrollView)
四、Activity的生命周期和onNewIntent方法的使用
前提:ActivityA已经启动过,处于当前应用的Activity堆栈中;
当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法
当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法
当ActivityA的LaunchMode为Standard时,由于每次启动ActivityA都是启动新的实例,和原来启动的没关系,所以不会调用原来ActivityA的onNewIntent方法
五、系统InputMethodManager的使用,使得用户输入完之后,登陆时,先对软键盘做出一些操作(比如 隐藏 软键盘 等等)
六、ProgressBar的setIndeterminate(boolean indeteminate)方法的作用
true:根据现在任务的进度可以设置进度值;
false:进度在最小和最大之间滚动,但是不清楚现在的进度情况,亦不能设置当前任务的进行的进度值。
七、ProgressDialog
八、Serialiazation序列化对象保存
将某类的对象转化成字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
九、APP整体构架分析
1、网络访问框架的书写:
使用AnsyncTask异步处理框架访问网络
1.1 BaseAsyncTask
@Override
protected void onCancelled() {
if (progressBar != null && progressBar.isShowing()) {
progressBar.dismiss();
}
}
@Override
protected void onPostExecute(Result result) {
super.onPostExecute(result);
if (progressBar != null && progressBar.isShowing()) {
progressBar.dismiss();
}
}
@Override
protected void onPreExecute() {
if (!TextUtils.isEmpty(noticeMsg)) {
progressBar = new SpmProgressBar(context);
}
}
这样,在任务处理之前,new出来一个自定义的SpmProgressbar;在任务处理完成之后,提示ThreadUI去讲新建出来的SpmProgressbar的对象progressBar消除(dismiass)掉。
1.2 MPosResultAsyncTask extends BaseAsyncTask
用于处理网络访问结果的框架
我们需要一个封装了访问网络得到的一个封装了该次访问所返回的结果的Bean,并使用这样的Bean去具体封装访问网络的结果,根据这样的一个Bean的对象去具体操作应该要像是的界面。
@Override
protected void onPostExecute(MPosResult result) {
super.onPostExecute(result);
if (result == null) {
MPosResult mResult = new MPosResult();
mResult.setErrorCode("-999");
mResult.setErrorMsg("网络异常");
onFailResult(mResult);
return;
}
MLog.i("MPosResultAsyncTask", "result:" + result, null);
if (result.isResult()) {
onSuccessResult(result);
} else {
onFailResult(result);
}
}
protected void onSuccessResult(MPosResult result) {
}
protected void onFailResult(MPosResult result) {
}
以上的onSuccessResult和onFailResult方法我们可以交给子类具体去实现。(可以的话,可以将该类用abstract去修饰,方便子类明了的去实现需要实现的方法)。