Android开发小技巧

### Android定制自己的日志工具

开发过程中为了调试而在各个地方打印日志,但是当项目完成需要上线的时候, 会发现大量的日志为删除,会打印出来,一方面会降低性能,另一方面会泄漏机密性数据。然是一行一行删除又太麻烦,所以最好的办法是能够自由的控制日志的打印,在程序处于开发阶段就让日志打印出来,当程序上线之后就把日志屏蔽掉。
新建一个LogUtil类:

public class LogUtil {
	public static final int VERBOSE = 1;  //啰嗦的
	public static final int DEBUG = 2;    //调试的
	public static final int INFO = 3;     //信息
	public static final int WARN = 4;     //警告
	public static final int ERROR = 5;    //错误
	public static final int NOTHING = 6;  //没有事情
	public static int level = VERBOSE;
	
	
	public static void v(String tag, String msg){
		if(level <= VERBOSE){
			Log.v(tag, msg);
		}
	}
	public static void d(String tag, String msg){
		if(level <=DEBUG) {
			Log.d(tag, msg);
		}
	}
	public static void i(String tag, String msg){
		if(level <=INFO){
			Log.i(tag,msg);
		}
	}
	public static void w(String tag, String msg){
		if(level <=WARN){
			Log.w(tag, msg);
		}
	}
	public static void e(String tag, String msg){
		if(level <=ERROR){
			Log.e(tag, msg);
		}
	}
}

这样就把一个自定义的日志工具创建好了,之后在项目里我们可以像使用普通日志一样使用LogUtil:

LogUtil.d("TAG","debug log");
LogUtil.w("TAG","warn log");

然后我们只需要修改 level变量的值,就可以自由地控制日志的打印行为了。比如让level等于VERBOSE就可以把所以的日志打印出来,让level等于WRAN就可以值打印警告以上级别的日志,让level等于NOTHING就可以把所有日志都屏蔽掉。这样日志的打印就变得可控了。

设置并获取全局Context

Android 提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类初始化,而我们可以定制一个自己的Application类继承Applicaton

public class MyApplication extends Application {
	private static Context context;
	@Override
	public void onCreate(){
		context = getApplicationContext();
	}
	public static Context getContext(){
		return context;
	}
}

我们重写了父类的onCreate 方法,并通过调用getApplicatonContext() 方法得到了一个应用程序级别的Context,然后又提供了一个静态的getContext() 方法,并然后刚才获取到的Context。
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。在AndroidManifest.xml 文件的<Application 标签下进行指定就可以了,代码如下:

<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
	package="com.example.networktest"
	android:versionCode="1"
	android:versionName="1.0" >
	...
	<application
		android:name="com.example.networktest.MyApplication" //这句就是让系统初始化MyApplication类
		...>
		...
	</application>3
</manifest>

注意,这里在指定MyApplication的时候一定要加上完整的包名,不然系统无法找到这个类。
这个我们就已经实现了一种全局获取Context的机制,以后无论你想在项目的任何地方使用Context,只需要调用以下MyApplication.getContext() 就可以了。

统一管理Activity

为了知道当前Activity是哪个类,或者在退出APP时如何finish掉所有的Activity。
首先我们可以定义一个基类Activity,之后所创建的所有Activity都继承这个基类,好做统一化管理。然后我们可以创建一个Application,在Application里面定一个静态变量List<Activity ,关键就是这个变量。每当一个Activity创建后,就将这个Activity实例添加到这个list中,每当一个activity finish后,就将这个Activity从list中移除。如果想一键退出APP,就直接遍历list中所有的activity,都执行finish退出,并清空list。

创建自定义Application(作用:当做Activity的容器,可以暴露添加,删除,执行finish等 方法)

public class MyApplication extends Application{
	private static Context context;   //全局Context
	private List<Activity> activityList = new ArrayList<Activity>();
	private static MyApplication instance;
	
	public static MyApplication getMyApplication() {  //获取Application单利
        if (instance == null) {
            instance = new MyApplication();
        }
        return instance;
    }

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		context = getApplicationContext();
	}
	
	public static Context getContext(){  //获取全局Context的静态方法
		return context;
	}
	
	//添加Activity
	public void addActivity(Activity activity){
		activityList.add(activity);
	}
	
	//移除某个Activity
	public void finishSingle(Activity activity){
		activityList.remove(activity);
		if(!activity.isFinishing()){
			activity.finish();
		}
	}
	
	//移除所有的activity(一键退出)
	public void finishAll(){
		for(Activity activity : activityList) {
			if(!activity.isFinishing()) {
				activity.finish();
			}
		}
		//该句 用于杀掉当前进程
		android.os.Process.killProcess(android.os.Process.myPid());
		//你也可以回到主界面
	}
}

创建Activity基类(作用:对所有的activity做统一的操作,如打印当前activity的类名,将activity加入list或移出list)

public class BaseActivity extends Activity{
	protected MyApplication myApplication = MyApplication.getMyApplication();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		//添加activity
		myApplication.addActivity(this);
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		myApplication.finishSingle(this);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值