Android快速開發之appBase——(4).詳解com.snicesoft.Application和BaseActivity

來源:互聯網
上載者:User

標籤:android   快速開發   appbase   

Android快速開發之appBase——(4).詳解com.snicesoft.Application和BaseActivity

在 Android快速開發之appBase——(1).appBase介紹中使用過com.snicesoft.Application和BaseActivity,本篇則解開她們的面紗。

1. com.snicesoft.Application1) 源碼分析
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. BaseActivity1) 源碼分析
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
2) 怎麼擴充
  • 繼承BaseActivity重寫自己的BaseActivity並添加自己APP的通用業務(推薦)
  • 繼承AVLib中的基礎Activity

Android快速開發之appBase——(4).詳解com.snicesoft.Application和BaseActivity

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.