Android中一些自己使用的小轱辘

来源:互联网 发布:unity3d游戏粒子特效 编辑:程序博客网 时间:2024/05/16 09:22

1.BaseFragment

package com.example.administrator.smartbj.fragment;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.example.administrator.smartbj.activity.MainActivity;/** * 作者:Created by Kevin on 2016/1/13. * 邮箱:haowei0708@163.com * 描述:fragment的基类 */public abstract class BaseFragment extends Fragment {    public Activity mActivity;    //fragment被创建    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mActivity = getActivity();    }    //处理fragment的布局    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        return initView();    }    //依附的Activity被创建完成    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        initData();        initListener();    }    //子类必须实现    public abstract View initView();    public void initData(){    }    public void initListener() {    }}

2.日志输出工具类LogUtil

import android.util.Log;public class LogUtils {    /** 日志输出级别NONE */    public static final int LEVEL_NONE = 0;    /** 日志输出级别V */    public static final int LEVEL_VERBOSE = 1;    /** 日志输出级别D */    public static final int LEVEL_DEBUG = 2;    /** 日志输出级别I */    public static final int LEVEL_INFO = 3;    /** 日志输出级别W */    public static final int LEVEL_WARN = 4;    /** 日志输出级别E */    public static final int LEVEL_ERROR = 5;    /** 日志输出时的TAG */    private static String mTag = "googleplay";    /** 是否允许输出log */    private static int mDebuggable = LEVEL_ERROR;    /** 用于记时的变量 */    private static long mTimestamp = 0;    /** 以级别为 d 的形式输出LOG */    public static void v(String msg) {        if (mDebuggable >= LEVEL_VERBOSE) {            Log.v(mTag, msg);        }    }    /** 以级别为 d 的形式输出LOG */    public static void d(String msg) {        if (mDebuggable >= LEVEL_DEBUG) {            Log.d(mTag, msg);        }    }    /** 以级别为 i 的形式输出LOG */    public static void i(String msg) {        if (mDebuggable >= LEVEL_INFO) {            Log.i(mTag, msg);        }    }    /** 以级别为 w 的形式输出LOG */    public static void w(String msg) {        if (mDebuggable >= LEVEL_WARN) {            Log.w(mTag, msg);        }    }    /** 以级别为 w 的形式输出Throwable */    public static void w(Throwable tr) {        if (mDebuggable >= LEVEL_WARN) {            Log.w(mTag, "", tr);        }    }    /** 以级别为 w 的形式输出LOG信息和Throwable */    public static void w(String msg, Throwable tr) {        if (mDebuggable >= LEVEL_WARN && null != msg) {            Log.w(mTag, msg, tr);        }    }    /** 以级别为 e 的形式输出LOG */    public static void e(String msg) {        if (mDebuggable >= LEVEL_ERROR) {            Log.e(mTag, msg);        }    }    /** 以级别为 e 的形式输出Throwable */    public static void e(Throwable tr) {        if (mDebuggable >= LEVEL_ERROR) {            Log.e(mTag, "", tr);        }    }    /** 以级别为 e 的形式输出LOG信息和Throwable */    public static void e(String msg, Throwable tr) {        if (mDebuggable >= LEVEL_ERROR && null != msg) {            Log.e(mTag, msg, tr);        }    }    /** 以级别为 e 的形式输出msg信息,附带时间戳,用于输出一个时间段结束点* @param msg 需要输出的msg */    public static void elapsed(String msg) {        long currentTime = System.currentTimeMillis();        long elapsedTime = currentTime - mTimestamp;        mTimestamp = currentTime;        e("[Elapsed:" + elapsedTime + "]" + msg);    }}

3.UIUtils

import android.content.Context;import android.content.res.Resources;import android.os.*;import com.example.administrator.googleplay.base.BaseApplication;/** * 作者:Created by Kevin on 2016/1/24. * 邮箱:haowei0708@163.com * 描述:UI相关的工具类 */public class UIUtils {    public static String getPackageName() {        return getContext().getPackageName();    }    /**     * 得到上下文     * @return     */    public static Context getContext() {        return BaseApplication.getContext();    }    /**     * 得到Resources对象     * @return     */    public static Resources getResoure(){        return getContext().getResources();    }    /**     * 得到String.xml中的字符串     * @param resId     * @return     */    public static String getString(int resId) {        return getResoure().getString(resId);    }    /**     * 得到String.xml中的字符串数组     * @param resId     * @return     */    public static String[] getStringArr(int resId) {        return getResoure().getStringArray(resId);    }    /**     * 得到Color.xml中的颜色     * @param colorId     * @return     */    public static int getColor(int colorId) {        return getResoure().getColor(colorId);    }    /**     * 得到当前主线程ID     * @return     */    public static long getMainThreadId(){        return BaseApplication.getMainThreadId();    }    /**     * 得到主线程的Handler     * @return     */    public static Handler getMainThreadHandler(){        return BaseApplication.getHandler();    }    /**     * 安全的执行一个任务     * @param task     */    public static void postSafely(Runnable task){        //得到当前线程的id        int curThreadId = android.os.Process.myTid();        //如果当前线程为主线程        if (curThreadId == getMainThreadId()){            task.run();        }else {//如果当前线程不是主线程            getMainThreadHandler().post(task);        }    }}

4.线程池

import java.util.concurrent.BlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 作者:Created by Kevin on 2016/1/27. * 邮箱:haowei0708@163.com * 描述:创建线程,执行任务,提交任务 */public class ThreadPoolProxy {    ThreadPoolExecutor mExecutor;    int mCorePoolSize;    int mMaximumPoolSize;    long mKeepAliveTime;    public ThreadPoolProxy(int CorePoolSize, int MaximumPoolSize, long KeepAliveTime) {        this.mCorePoolSize = CorePoolSize;        this.mMaximumPoolSize = MaximumPoolSize;        this.mKeepAliveTime = KeepAliveTime;    }    private ThreadPoolExecutor initThreadPoolExecutor() {        //使用单列设计模式,双重检查加锁        if (mExecutor == null) {            synchronized (ThreadPoolProxy.class) {                if (mExecutor == null) {                    TimeUnit unit = TimeUnit.MILLISECONDS;                    BlockingQueue<Runnable> workQueue = new LinkedBlockingDeque<>();//无界队列                    ThreadFactory threadFactory = Executors.defaultThreadFactory();                    RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();//丢弃任务并抛出异常                    mExecutor = new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, mKeepAliveTime, unit, workQueue, threadFactory, handler);                }            }        }        return mExecutor;    }    /**     * 执行任务     */    public void execute(Runnable task) {        initThreadPoolExecutor();        mExecutor.execute(task);    }    /**     * 提交任务     */    public Future<?> submit(Runnable task) {        initThreadPoolExecutor();        return mExecutor.submit(task);    }    /**     * 移除任务     */    public void removeTask(Runnable task) {        initThreadPoolExecutor();        mExecutor.remove(task);    }}

5.线程池工厂

import com.example.administrator.googleplay.manager.ThreadPoolProxy;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 作者:Created by Kevin on 2016/1/27. * 邮箱:haowei0708@163.com * 描述:线程池的工厂 */public class ThreadPoolFactory {    static ThreadPoolProxy mNormalPool;    static ThreadPoolProxy mDownloadPool;    //普通线程池    public static ThreadPoolProxy getNormalPool() {        //使用单列设计模式,双重检查加锁        if (mNormalPool == null) {            synchronized (ThreadPoolProxy.class) {                if (mNormalPool == null) {                    mNormalPool = new ThreadPoolProxy(5, 5, 3000);                }            }        }        return mNormalPool;    }    //下载线程池    public static ThreadPoolProxy getDownloadPool() {        //使用单列设计模式,双重检查加锁        if (mDownloadPool == null) {            synchronized (ThreadPoolProxy.class) {                if (mDownloadPool == null) {                    mDownloadPool = new ThreadPoolProxy(3, 3, 3000);                }            }        }        return mDownloadPool;    }}

6.BaseAdapter的封装

import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * BaseAdapter的封装 * @param <T> */public abstract class CommonAdapter<T>  extends BaseAdapter {  protected List<T> mDatas;  protected LayoutInflater mInflater;    protected Context mContext;   protected int layoutId;  public CommonAdapter(Context ctx,List<T> lists,int layoutId){    this.mDatas=lists;    mInflater=(LayoutInflater)   ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    this.mContext=ctx;    this.layoutId=layoutId;  }  @Override  public int getCount() {    return mDatas.size();  }  @Override  public Object getItem(int position) {    return mDatas.get(position);  }  @Override  public long getItemId(int position) {    return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {    ViewHolder vh=ViewHolder.getViewHolder(convertView, mContext, parent, layoutId, position);    convert(vh, mDatas.get(position));    return vh.getConvertView();  }  abstract protected void convert(ViewHolder vh,T item);}       

7.ViewHolder

import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * ViewHolder的封装  */public class ViewHolder {   private final SparseArray<View> mView;      private View mConvertView;   public ViewHolder(Context context, ViewGroup parent, int layoutId, int position){     this.mView=new SparseArray<View>();     mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);       mConvertView.setTag(this);   };   /**  * 获得viewholder  * @param convertView  * @param context  * @param parent  * @param layoutId  * @param position  * @return  */   public static ViewHolder getViewHolder(View convertView,Context context,ViewGroup parent, int layoutId, int position){     if(null==convertView){       return new ViewHolder(context, parent, layoutId, position);     }     return (ViewHolder) convertView.getTag();   }   /**  * @param id  * @return  */   public  <T extends View> T getView(int id){     View view=mView.get(id);     if(null==view){       view=mConvertView.findViewById(id);       mView.put(id,view);     }     return (T)view;   }   public View getConvertView(){     return mConvertView;   }}
0 0
原创粉丝点击