Android tree应用框架.docx
《Android tree应用框架.docx》由会员分享,可在线阅读,更多相关《Android tree应用框架.docx(33页珍藏版)》请在冰豆网上搜索。
Androidtree应用框架
Androidtree应用框架
目录(?
)[-]
1简介
2内容
3结束
简介
一个好的Android应用开发框架,可以加快Android开发速度,今天笔记基于许多开源项目自写了一款Android应用框架。
内容
框架包括:
界面管理(Activity管理)、数据库操作(orm框架、加密等)、http交互、缓存管理、下载管理、路径管理、日志输出、网络管理、系统命令、加解密、stl容器、任务管理、奔溃管理、存储管理、其它辅助管理…。
解决思路如下:
界面管理:
使用Stack记录Activity的运行轨迹,并在每个Activity添加一个广播处理自定义事件。
[cpp]viewplaincopy
4privatestaticStackmActivityStack;//进行Activity运行记录
数据库管理:
对数据库的操作要求orm框架、加解密等,采用的是greendao和sqlcrypt开源项目解决。
http交互:
实现http交互方式有同步、异步操作。
采用的是android-async-http开源项目解决。
缓存管理:
实现缓存方式有内存缓存、磁盘缓存。
其中内存缓存只针对图片处理,磁盘缓存是针对某目录,实现的方式有:
先进先出、最大量、使用频率等。
下载管理:
下载管理方式有多线程下载、单线程下载。
路径管理:
简单的说就是对程序的目录管理,分图片、视频、音频、缓存目录等。
日志输出:
基于Log的管理(分调式、发布模式和文件输出、log输出)。
网络管理:
2G、3G、4G等联网方式不同的管理和监听。
系统命令:
直接命令运行。
加解密:
aes、base64、des、md5等加密方式。
stl容器:
重写stl部分容器。
任务管理:
基于AsyncTask任务的管理。
奔溃管理:
捕捉奔溃信息,并提供发送接口。
采用的是acra方法解决。
存储管理:
主要是SharedPreferences和Properties的管理。
其它辅助管理:
版本、内存、手机格式、字符串操作……等等。
项目如图:
效果如图:
+
相关测试代码:
5@Override
6protectedvoidonCreate(BundlesavedInstanceState){
7super.onCreate(savedInstanceState);
8setContentView(R.layout.test_tree);
9
10TFilePathManager.getInstance().initConfig(null);//默认目录(下载�?
图片、视频�?
缓存等目�?
11//优先考虑内存条,其次手机内存�?
12}
13
14publicvoidonClickTestPath(Viewview){//测试路径
15TFilePathManager.getInstance().initConfig(
16Environment.getExternalStorageDirectory().getPath()
17+File.pathSeparator+"test");
18
19//程序目录里面分了图片、缓存区、下载图、音频区、视频区
20TFilePathManager.getInstance().getAppPath();
21TFilePathManager.getInstance().getAudioPath();
22TFilePathManager.getInstance().getCachePath();
23TFilePathManager.getInstance().getDownloadPath();
24TFilePathManager.getInstance().getImagePath();
25}
26
27publicvoidonClickTestLog(Viewview){//测试日志
28TLog.enablePrintToFileLogger(true);
29for(inti=0;i<100;i++)
30TLog.i(TAG,"123456"+i);
31//TLog.release();//关闭程序可释�?
32
33//日志是放在程序目录下
34
35//TLog.enableIgnoreAll(enable);
36//TLog.enableIgnoreWarn(enable);
37}
38
39publicvoidonClickTestTActivity(Viewview){//测试TActivity
40Intentintent=newIntent();
41intent.setClass(this,TestTActivity.class);
42startActivity(intent);
43}
44
45publicvoidonClickTestHttp1(Viewview){//测试Http1
46Intentintent=newIntent();
47intent.setClass(this,TestHttp1.class);
48startActivity(intent);
49}
50
51publicvoidonClickTestHttp2(Viewview){//测试Http2
52Intentintent=newIntent();
53intent.setClass(this,TestHttp2.class);
54startActivity(intent);
55}
56
57publicvoidonClickTestThreadsdown(Viewview){//测试多线程下载
58Intentintent=newIntent();
59intent.setClass(this,TestDowns.class);
60startActivity(intent);
61}
62
63publicvoidonClickTestCrash(Viewview){//崩溃
64intresult=1/0;
65}
66
67publicvoidonClickTestSqlEncrypt(Viewview){//测试sql加密
68Intentintent=newIntent();
69intent.setClass(this,TestSqlEncrypt.class);
70startActivity(intent);
71}
72
73publicvoidonClickTestDAO(Viewview){//测试orm数据库
74Intentintent=newIntent();
75intent.setClass(this,TestDAO.class);
76startActivity(intent);
77}
78
79publicvoidonClickTestDB(Viewview){//测试Think数据库
80Intentintent=newIntent();
81intent.setClass(this,TestDB.class);
82startActivity(intent);
83}
84
85publicvoidonClickTestCache(Viewview){//测试缓存
86Intentintent=newIntent();
87intent.setClass(this,TestCache.class);
88startActivity(intent);
89}
90
91publicvoidonClickTConfig(Viewview){//测试配置信息
92TPreferenceConfig.getInstance().initConfig(this);
93TPropertiesConfig.getInstance().initConfig(this);
94
95TIConfigiConfig=TPreferenceConfig.getInstance();
96iConfig.setBoolean("123",true);
97booleanresult=iConfig.getBoolean("123",false);
98
99iConfig=TPropertiesConfig.getInstance();
100iConfig.setBoolean("1234",true);
101result=iConfig.getBoolean("1234",false);
102}
103
104publicvoidonClickEncryption(Viewview){//测试加密
105Stringsrc="banketree@";
106Stringencrypted="";
107Stringkey="banketree";
108
109try{
110encrypted=TAes.encrypt(key,src);
111StringtempString=TAes.decrypt(key,encrypted);
112
113encrypted=TBase64.encode(src.getBytes());
114tempString=TBase64.decode(encrypted).toString();
115
116encrypted=TDes.encrypt(key,src);
117tempString=TDes.decrypt(key,encrypted);
118TLog.i(this,tempString);
119}catch(Exceptione){
120e.printStackTrace();
121}
122}
123
124publicvoidonClickZip(Viewview){//测试解压缩
125try{
126TCompressUpressJar("");
127TCompressUpressZip("");
128TCompressUtils.uncompressJar("");
129TCompressUtils.uncompressZip("");
130}catch(Exceptione){
131e.printStackTrace();
132}
133}
奔溃处理回调:
134@Override
135publicvoidonAppCrash(StringcrashFile){
136
137TLog.d(TAG,"CreatingDialogfor"+crashFile);
138IntentdialogIntent=newIntent(this,TestCrash.class);
139dialogIntent.putExtra(TCrash.EXTRA_REPORT_FILE_NAME,crashFile);
140dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
141startActivity(dialogIntent);
142}
缓存:
143mMemoryCacheSize=2*1024*1024;//2M
144mDiscCacheSize=2*1024*1024;//2M
145mDiscCacheFileCount=100;//一百个文件
146mMemoryCache=TCacheManager.createLruMemoryCache(mMemoryCacheSize);
147
148try{
149mDiscCache1=TCacheManager.createReserveDiscCache(TFilePathManager
150.getInstance().getCachePath(),"test");
151}catch(Exceptione){
152e.printStackTrace();
153}
154
155try{
156mDiscCache2=TCacheManager.createFileCountLimitedDiscCache(
157mDiscCacheFileCount,TFilePathManager.getInstance()
158.getCachePath());
159}catch(Exceptione){
160e.printStackTrace();
161}
162try{
163Drawabledemo=getResources().getDrawable(R.drawable.ic_launcher);
164Bitmapbitmap=((BitmapDrawable)demo).getBitmap();
165if(arg0==mTest1Button){
166mMemoryCache.put("123",bitmap);
167mMemoryCache.put("1234",bitmap);
168
169mMemoryCache.get("123");
170mMemoryCache.get("1234");
171}elseif(arg0==mTest2Button){
172mDiscCache1.put("123",mContext.getCacheDir());
173mDiscCache1.get("123");
174}elseif(arg0==mTest3Button){
175mDiscCache2.put("123",mContext.getCacheDir());
176mDiscCache2.get("123");
177}
178}catch(Exceptione){
179makeText(e.getMessage());
180}
Activity之间的通信:
181@Override
182publicvoidonClick(Viewarg0){
183if(testComparatorButton==arg0){
184Log.i("","");
185UIBroadcast.sentEvent(mContext,1001,1002,"");
186}
187}
188
189@Override
190publicvoidprocessEvent(Intentintent){
191super.processEvent(intent);
192intmainEvent=intent.getIntExtra(UIBroadcast.MAINEVENT,-1);
193intsubEvent=intent.getIntExtra(UIBroadcast.EVENT,-1);//
194
195makeText("哈哈触发�?
"+mainEvent+subEvent);//每个Activity可接收广播?
196}
Http同步异步请求:
197if(view==mCancelButton){
198mTAsyncHttpClient.cancelRequests(this,true);
199mTAsyncHttpClient.cancelAllRequests(true);
200}elseif(view==mGetButton){
201url="https:
//httpbin.org/get";
202mTAsyncHttpClient.get(url,newAsyncHttpResponseHandler(){
203
204@Override
205publicvoidonSuccess(intstatusCode,Header[]headers,
206byte[]responseBody){
207debugHeaders(headers);
208debugStatusCode(statusCode);
209debugResponse(newString(responseBody));
210}
211
212@Override
213publicvoidonFailure(intstatusCode,Header[]headers,
214byte[]responseBody,Throwableerror){
215debugHeaders(headers);
216debugStatusCode(statusCode);
217if(responseBody!
=null){
218debugResponse(newString(responseBody));
219}
220
221TLog.e(this,error.getMessage());
222}
223
224@Override
225publicvoidonProgress(intbytesWritten,inttotalSize){
226super.onProgress(bytesWritten,totalSize);
227}
228
229@Override
230publicvoidonRetry(intretryNo){
231makeText(String.format("Requestisretried,retryno.%d",
232retryNo));
233}
234});
235}elseif(view==mPostButton){
236url="http:
//httpbin.org/post";
237mTAsyncHttpClient.post(mContext,url,getRequestHeaders(),
238getRequestEntity(),null,newAsyncHttpResponseHandler(){
239
240@Override
241publicvoidonStart(){
242}
243
244@Override
245publicvoidonSuccess(intstatusCode,Header[]headers,
246byte[]response){
247debugHeaders(headers);
248debugStatusCode(statusCode);
249debugResponse(newString(response));
250}
251
252@Override
253publicvoidonFailure(intstatusCode,Header[]headers,
254byte[]errorResponse,Throwablee){
255debugHeaders(headers);
256debugStatusCode(statusCode);
257debugThrowable(e);
258if(errorResponse!
=null){
259debugResponse(newString(errorResponse));
260}
261}
262});
263
264}elseif(view==mPutButton){
265url="http:
//httpbin.org/put";
266
267mTAsyncHttpClient.put(this,url,getRequestHeaders(),
268getRequestEntity(),null,newAsyncHttpResponseHandler(){
269
270@Override
271publicvoidonStart(){
272}
273
274@Override
275publicvoidonSuccess(intstatusCode,Header[]headers,
276byte[]response){
277debugHeaders(headers);
278debugStatusCode(statusCode);
279debugResponse(newString(response));
280}
281
282@Override
283publicvoidonFailure(intstatusCode,Header[]headers,
284byte[]errorResponse,Throwablee)