# 功能設計
先把app常用的功能進行抽象,主要從Activity Fragment Service等控件進行考慮。
其次完善相關的工具類。主要從代碼封裝、迭代、可維護性等方面考慮。
### 抽象
### Activity的抽象
Activity抽象主要目的是簡化具體功能界面的工作量。主要通過代碼封裝的方式來達到效果。
同時需要處理網絡請求、UI刷新等操作
### Fragment的抽象
Fragment的抽象與activity類似。但不同的是需要處理多個Fragment之間的互相調用,傳參方式也不太一樣。
### 工具類
App需要一個管理Activity或者Fragment的工具類,對其做全局的操作(方法調用) 為了減少代碼的耦合度。不建議在Activity中直接加static引用。可以通過寫一些工具類間接的實現。
?
Activity中訪問網絡請求以及回調刷新UI是一件比較繁瑣的事兒。常規的做法是new一個Thread是傳入一個Handler對象,網絡請求完成以后sendMessage刷新。但是這種做法耦合度比較強,而且好多業務邏輯都需要在Activity中處理,代碼臃腫
?
~~~
private Handler handler;
protected void onCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
handler= new handler(){
publicvoid handlerMessage(){
if(msg.what== 1){
//do sth
}
}
}
}
public class NetRunnable implementsRunnable{
privateHandler handler;
publicNetRunnable(Handler handler){
this.handler= handler;
}
publicvoid run(){
//do sth 處理網絡等
Messagemsg = Message.obtain();
msg.what= 1;
msg.obj= “網絡請求結果”;
this.handler.sendMessage(msg);
}
}
~~~
建議將網絡請求的代碼封裝一下, ?封裝后續
### ActivityMgr
這個類的作用主要是保存app中所有正在運行的Activity的引用。
?
~~~
private static Stack<BaseActivity>activities = new Stack<BaseActivity >;
public static void push(BaseActivityactivity){
activities.push(activity);
}
public static void remove(BaseActivityactivity){
activities.remove(activity);
}
public class BaseActivity extends Activity
public void onCreate(BundlesaveInstanceState){
ActivityMgr.push(this);
}
public void onDestroy(){
ActivityMgr.remove(this);
}
~~~
解析一下為什么onDestroy的時候采用remove方法而不是pop()
防止acitivty AB,?? A啟動 B? 如果此時A#finish調用Stack#pop則會把B的引用移除
?
Fragment的工具類先略過
- 前言
- Android sdk開發 - 序
- Android sdk開發(一)Application設計
- Android sdk開發(二) Log日志類的設計
- Android SDK開發 (三) App的屬性配置
- android SDK開發-- 功能設計
- android SDK開發 -- TitleBar封裝(一)
- android SDK開發 -- TitleBar封裝(二)
- Android SDK開發 -- TitleBar重構 (代理模式的使用)
- Android SDK開發 -- TitleBar重構 (代理模式-優化)
- android SDK核心功能 -- 消息傳遞與界面刷新
- Android SDK開發 -- TitleBar重構 - 使用策略模式、舍棄代理模式