Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity
来源:互联网 发布:微软数据库工程师 编辑:程序博客网 时间:2024/05/21 17:06
转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46441571,请尊重他人的辛勤劳动成果,谢谢!
Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity
在 Android快速开发之appBase——(1).appBase介绍中使用过com.snicesoft.Application和BaseActivity,本篇则解开她们的面纱。
1. com.snicesoft.Application
1) 源码分析
package com.snicesoft;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.graphics.drawable.Drawable;import android.view.View;import com.lidroid.xutils.BitmapUtils;import com.lidroid.xutils.DbUtils;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.bitmap.BitmapDisplayConfig;import com.snicesoft.avlib.AVLib;import com.snicesoft.avlib.AVLib.LoadImg;import com.snicesoft.http.APIs;import com.snicesoft.http.Charset;import com.snicesoft.http.HttpReq;/*** 程序Application,作为应用管理配置* * @author zhe**/public class Application extends android.app.Application { private HttpUtils httpUtils; private BitmapUtils bitmapUtils; private HashMap<String, DbUtils> dbHashMap = new HashMap<String, DbUtils>(); private HttpReq httpReq; public HttpReq httpReq() { if (httpReq == null) httpReq = new HttpReq(httpUtils); return httpReq; } public HttpUtils hu() { return httpUtils; } public BitmapUtils bu() { return bitmapUtils; } public DbUtils du(String dbName) { if (dbHashMap.get(dbName) == null) dbHashMap.put(dbName, DbUtils.create(getBaseContext(), dbName)); return dbHashMap.get(dbName); } @Override public void onCreate() { httpUtils = new HttpUtils(); httpUtils.configTimeout(APIs.Base.TIME_OUT); httpUtils.configRequestThreadPoolSize(10); httpUtils.configResponseTextCharset(Charset.UTF_8); bitmapUtils = new BitmapUtils(getBaseContext()); AVLib.setLoadImg(new LoadImg() { @SuppressWarnings("deprecation") @Override public void loadImg(View v, int loading, int fail, String uri) { BitmapDisplayConfig config = new BitmapDisplayConfig(); if (loading != 0) { Drawable drawable = getResources().getDrawable(loading); config.setLoadingDrawable(drawable); } if (fail != 0) { Drawable drawable = getResources().getDrawable(fail); config.setLoadFailedDrawable(drawable); } bitmapUtils.display(v, uri, config); } }); } private List<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity) { activities.add(activity); } public void removeActivity(Activity activity) { if (activities.contains(activity)) { activities.remove(activity); } } public void finishActivity(Class<?> activity) { for (Activity act : activities) { if (act.getClass() == activity) { act.finish(); break; } } } public void exitApp() { for (Activity activity : activities) { activity.finish(); } android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); }}
- List及相关的方法,是常用的App中管理activity的方法
- exitApp() 是真正退出app的方法,只有将所有的activity全部finish,以及杀掉app的进程才能够真正退出一个应用。
- HttpReq、BitmapUtils、DbUtils、HttpUtils 全部在application启动的时候配置好,并且提供对应方法获取,这样做的目的就是让整个APP只保留一个对象,放置资源浪费,任何只要能获取到Application的地方都可以获取对应的模块唯一对象进行操作。
- hu():返回HttpUtils对象
- bu():返回BitmapUtils对象
- httpReq():返回HttpReq对象
- du(String dbName):根据数据库名字返回DbUtils对象,提供多数据支持。
2) 怎么扩展
- 可以继承com.snicesoft.Application实现自己的Application(推荐)
- 也可以完全仿照com.snicesoft.Application自己实现Application
com.snicesoft.Application在最早的时候用到了static方法,由于static对于对象的引用控制不当,会导致很多问题,后来全部改掉。
2. BaseActivity
1) 源码分析
package com.snicesoft.base;import android.os.Bundle;import android.view.View;import com.snicesoft.Application;import com.snicesoft.avlib.base.AvFragment;import com.snicesoft.avlib.base.AvFragmentActivity;import com.snicesoft.avlib.rule.IData;import com.snicesoft.avlib.rule.IHolder;import com.snicesoft.util.FragmentUtil;public abstract class BaseActivity<H extends IHolder, D extends IData> extends AvFragmentActivity<H, D> { public Application getApp() { return (Application) getApplication(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getApp().addActivity(this); } protected AvFragment<?, ?, ?> curFragment; public void openFragment(int id, AvFragment<?, ?, ?> fragment) { if (curFragment != null && curFragment == fragment) return; FragmentUtil.openFragment(id, fragment, getSupportFragmentManager()); curFragment = fragment; } public void replaceFragment(int id, AvFragment<?, ?, ?> fragment, boolean backStack) { FragmentUtil.replaceFragment(id, fragment, getSupportFragmentManager(), backStack); curFragment = fragment; } @Override public void onClick(View v) { super.onClick(v); if (curFragment != null) curFragment.onClick(v); } @Override protected void onDestroy() { super.onDestroy(); getApp().removeActivity(this); }}
- BaseActivity扩展子AVLib中的AvFragmentActivity,继承了View控件自动绑定和View数据绑定的特性。增加了操作Fragment的常用方法。
- 默认实现了android.view.View$OnClickListener接口,并且解决onclick事件分发到Fragment的问题。
- getApp():获取com.snicesoft.Application对象或者其子类对象,方便在activity和fragment获取网络、数据库、图片处理等模块操作。
- onCreate中默认将当前的activity添加到com.snicesoft.Application管理中
- onDestroy中默认将当前的activity从com.snicesoft.Application管理中移除
2) 怎么扩展
- 继承BaseActivity重写自己的BaseActivity并添加自己APP的通用业务(推荐)
- 继承AVLib中的基础Activity
- 完全可以自己重写BaseActivity
3. 补充
今天家里网络出现了问题,编辑的时候出现了Markdown处理问题,提交不全,现在补充完整。
对于Application和BaseActivity来讲,只要能满足自己业务的需求,怎样写都可以。这里只是提供我的一个基础模板,如果能满足项目需求,可以直接使用。不能满足或者你有更好的想法,不妨给我留言说说,让我借鉴下,完善我的appBase。下一篇将会讲的BasePresenter,用于处理业务的一个组件(或者称为层,作用相当于javaEE中的Service层)。
最后,希望大家多多点评!!
4 0
- Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity
- Android快速开发之appBase——(1).appBase介绍
- Android快速开发之appBase——(3).详解IHolder和IData
- Android快速开发之appBase——实战《购物车》
- Android快速开发之appBase——(6).HttpReq和APICloudSDK
- Android快速开发之appBase——(2).万能的Adapter
- Android快速开发之appBase——(5).BasePresenter的使用
- Android 项目(详解一)之—— 基础类BaseActivity/BaseFragment/总的Application
- 手表邮件开发中的Application 和BaseActivity
- android 之 Baseactivity 和BaseFragment
- 部署tomcat之appBase和docBase
- android学习笔记——BaseActivity使用
- Android学习之自定义基类BaseApplication和BaseActivity
- android app 框架之BaseActivity
- Android开发框架搭建——BaseActivity的抽取(二)
- 手把手教你如何搭建一个自己的安卓快速开发框架之BaseActivity(一)
- 为了快速Android开发整理出的一套框架,BaseFragment,BaseActivity,RecyleAdapter
- 【转载】Android详解之---Application
- 编译原理 龙书 第二章 一个简单的算术式(+,-)翻译器实现
- 在Eclipse中创建Maven多模块工程的例子
- Xcode非ARC项目中设置部分文件ARC支持
- Flatten Binary Tree to Linked List
- ImageView圆角
- Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity
- MapReduce的Map side join
- 笔试—智力题
- java设计模式----策略模式
- Struts2文件上传与下载
- Android进步之十五:android中string.xml中%1$s、%1$d等的用法
- android学习分享网址
- List of iOS Top 1000 Libraries
- laravel Eloquent ORM