2015.6项目经历总结
来源:互联网 发布:qq音乐 知乎 编辑:程序博客网 时间:2024/05/22 17:39
一、2015.6月-2015年12月 北京斯福德科技有限公司
负责项目:
1.365优生活(商城)
<1>套用自创框架:
一个类似异步线程的接口AsyncTaskListener:
void initView();//初始化view void initData();//初始化数据 void onBeforeTask(int taskId);//类似异步线程onPreExecute() Object onTask(int taskId, Object... params) throws Exception; //类似异步线程doInBackground() void onAfterTask(int taskId, Object result);//类似异步线程onPostExecute void onTaskError(int taskId, Exception exception);//错误日志
一个继承异步线程的抽象类TqAsyncTask:
public abstract class TqAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { private Exception exception; public TqAsyncTask() { } @Override protected void onPreExecute() { onBeforeTask(); } @Override protected Result doInBackground(Params... params) { try { return onTask(params); } catch (Exception e) { exception = e; return null; } } @Override protected void onPostExecute(Result result) { if (hasException()) { onTaskError(exception); } else { onAfterTask(result); cancel(true); } } private boolean hasException() { return exception != null; } abstract void onBeforeTask(); abstract Result onTask(Params... params) throws Exception; abstract void onAfterTask(Result result); abstract void onTaskError(Exception exception);}
一个继承自TqAsyncTask的类(主要作为在activity中new异步线程的使用):
public class TAsyncTask extends TqAsyncTask<Object, Void, Object> { private static final int DEFAULT_TASK_ID = 1000; private int mTaskID; private AsyncTaskListener mAsyncTaskListener; public int getTaskID() { return mTaskID; } public void setTaskID(int taskID) { this.mTaskID = taskID; } public TAsyncTask(AsyncTaskListener asyncTaskListener) { this(DEFAULT_TASK_ID, asyncTaskListener); } public TAsyncTask(int taskID, AsyncTaskListener asyncTaskListener) { super(); this.mAsyncTaskListener = asyncTaskListener; setTaskID(taskID); } @Override void onBeforeTask() { mAsyncTaskListener.onBeforeTask(mTaskID); } @Override Object onTask(Object... params) throws Exception { return mAsyncTaskListener.onTask(mTaskID, params); } @Override void onAfterTask(Object result) { mAsyncTaskListener.onAfterTask(mTaskID, result); } @Override void onTaskError(Exception exception) { mAsyncTaskListener.onTaskError(mTaskID, exception); }}
一个继承activity/fragment并实现AsyncTaskListener的类:
public abstract class TBBaseAct extends Activity(Fragment) implements AsyncTaskListener { public Handler mHandler = new Handler() { public void handleMessage(Message msg) { complete(msg); }; }; public abstract void complete(Message msg); public Handler getmHandler() { return mHandler; }}
<2>优化处理图片(大量图片):
1. 尝试了网上通过BitmapFactory.Options来缩小图片大小均无效,还是会报出OOM;
2. 尝试通过缓存机制SoftReference来缓存网络下载的图片,通过WeakReference来防止内存泄漏,减缓了出现OOM的现象,并不能完全解决;
3.尝试通过缓存LruCache缓解内存异常,代码如下:
int maxMemory = (int) Runtime.getRuntime().maxMemory(); int mCacheSize = maxMemory / 8; //给LruCache分配1/8 4M mMemoryCache = new LruCache<String, Bitmap>(mCacheSize){ //必须重写此方法,来测量Bitmap的大小 @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } };
4.尝试通过缓存LruCache存储图片,并将图片放到sdcard里,这样图片很流畅,但还是会出现OOM;
解决:使用第三方jar afinal.jar/universal-image-loader.jar解决;
<3>对afinal.jar/universal-image-loader.jar了解的基本概念:
(1) RequestManager:请求生成和管理模块
(2) Engine:引擎部分,负责创建任务(获取数据),并调度执行
(3) GetDataInterface:数据获取接口,负责从各个数据源获取数据。
比如 MemoryCache 从内存缓存获取数据、DiskCache 从本地缓存获取数据,下载器从网络获取数据等。
(4) Displayer:资源(图片)显示器,用于显示或操作资源。
比如 ImageView,这几个图片缓存都不仅仅支持 ImageView,同时支持其他 View 以及虚拟的 Displayer 概念。
(5) Processor 资源(图片)处理器负责处理资源,比如旋转、压缩、截取等。
题外:并对其他缓存图片的jar提供链接:http://p.codekk.com/?s=图片缓存
<4>fragmentActivity切换fragment时,数据刷新问题:
@Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.user_order_list); //3个fragment ncFrag = new UserNoCompleteFrag(); ycFrag = new UserYesCompleteFrag(); thFrag = new UserTuihuoComleteFrag(); mFragments = new Fragment[3]; mFragments[0] = ncFrag; mFragments[1] = ycFrag; mFragments[2] = thFrag; fragmentManager = getSupportFragmentManager(); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.show_order_view, ncFrag); fragmentTransaction.add(R.id.show_order_view, ycFrag); fragmentTransaction.add(R.id.show_order_view, thFrag); fragmentTransaction.hide(mFragments[0]).hide(mFragments[1]) .hide(mFragments[2]); }@Override protected void onStop() { super.onStop(); if (null != ncFrag) { ncFrag.onDestroy(); ncFrag = null; } if (null != ycFrag) { ycFrag.onDestroy(); ycFrag = null; } if (null != thFrag) { thFrag.onDestroy(); thFrag = null; } }public void onClick(View arg0) { fragmentManager.beginTransaction().hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]).show(mFragments[0]).commit();}
<5>adapter刷新,当每个item布局不一致时,采用如下方法
HashMap<Integer, View> lmap = new HashMap<Integer, View>();public View getView(int arg0, View convertView, ViewGroup arg2) { ViewHolder vh = null; if (lmap.get(arg0) == null) { vh = new ViewHolder(); .... }else { convertView = lmap.get(arg0); vh = (ViewHolder) convertView.getTag(); }}以上若有问题,请同学指正哈。
- 2015.6项目经历总结
- 2014-2015项目经历总结
- 比较失败的项目管理经历总结
- ClassTwo项目总结--第一次失败经历
- 自己项目经历的技术总结
- 项目经历
- 项目经历
- 项目经历
- 项目经历
- 项目经历
- 总结一下,这几个月的项目经历
- 经历项目的磨难,渴望快乐的项目—H项目总结2,项目调研
- 经历项目的磨难,渴望快乐的项目—H项目总结1,合同与计划
- 总结总结招聘经历
- 失败的项目经历
- 我的项目经历
- 项目开发经历
- 项目经历汇总
- java 异常捕捉 ( try catch finally )
- Ubuntu 12.04 alternate 64位 执行文件,显示:bash: ***: No such file or directory
- 正则表达式大全
- 同是天涯淪落人
- 关于android蓝牙可见性设置
- 2015.6项目经历总结
- 初识JAVA中的PrintWriter/Scanner,文本的读入和写出
- css文字省略号
- hdu 4035 Maze 期望DP 待定系数法 ★★
- Xcode提示linker command failed with exit code 1 (use -v to see invocation)解决方法
- decode()和nvl()函数
- iOS 城市定位 英文
- VC用MFC开发的圆形进度条控件
- Bmob用户功能详解(一)