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
- Android中一些自己使用的小轱辘
- Android使用中一些小问题记录的记录
- C#使用中自己的一些问题
- 自己在拖xib中遇到的一些小问题
- 自己的一些小问题
- Android中收集的一些小技巧
- Android中一些小的知识点
- Android gridview 使用的一些小问题
- Android中实现StickyNavLayout自己的小demo
- android中内存溢出自己的一些总结
- 留着自己用,android中gridview的一些属性
- 开发中Android的一些总结,帮助自己记忆
- Android代码中自己写的一些工具类(整理)
- Android 中一些小经验总结
- 自己对WTL使用中一个小问题的解决方法
- Android中使用自己的ttf文字
- 自己MarkDown编辑中使用的一些东西
- SQLSERVER2000使用中遇到的一些小问题,不断更新中。。。
- 浏览器兼容性测试学习01
- HTTP报文详解
- Audio笔记之重采样
- HTML5高防win8风格
- 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 格子中输出(代码填空)
- Android中一些自己使用的小轱辘
- hjimce算法类博文目录
- 安装android SDK的安装方法,亲自安装,分享经验,绝对有效
- 二维码
- oracle 安装步骤,导入导出数据,创建表空间 创建用户
- HDU 5613:Baby Ming and Binary image
- [java] synchronized
- bash位置参数变量-58
- Leetcode 36 - Valid Sudoku