设定自己的代码风格--Android学习笔记5

设定自己的代码风格


一、自定义BaseActivity:

      自定义BaseActivity来替换Activity,这样就可以执行一些自己想要的固定操作;比如下面的随时知道正在执行的Activity,以及屏幕密度;

package cpj.com.MyTool;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

/**
 * Created by cpj on 2016/3/11.
 * 打印当前的活动名称(让他们都继承此类而不是Activity)
 */
public class BaseActivity extends Activity{

    public static final String TAG = "BaseActivity";

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        //打印当前的活动
        String str = "当前执行的活动是:"+getClass().getSimpleName();
        MyLog.d(TAG, str);//打印当前活动名称

        //打印屏幕的密度值
        float xdpi = getResources().getDisplayMetrics().xdpi;
        float ydip = getResources().getDisplayMetrics().ydpi;
        String str_dp = "当前屏幕的密度值为:"+ xdpi+ "  *  "+ ydip;
        Log.d(TAG, str_dp);

        //将当前活动存入List
        ActivityCollector.addActivity(this);
    }

    /**
     * 将马上销毁的一个活动在管理器中移除
     * */
    protected void onDestory(){
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

}

二、自定义MyLog:


    自定义MyLog来替换Log,这样更方便设置自己的日志打印方式和日志级别控制;当我们不想在Logcat里显示某个级别的日志信息时,只需将当前的日志显示级别提高即可。

package cpj.com.MyTool;

import android.util.Log;

/**
 * Created by cpj on 2016/4/12.
 * 创建自己的日志打印机制,实时控制是否打印
 */
public class MyLog {

    //日志的打印级别
    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 final int LEVEL = DEBUG;

    /*
     * 当自定义的级别小于日志的打印级别时打印,否则屏蔽打印
     * */
    @SuppressWarnings("unused")
	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);
    }

}

/**
 * 使用方法:
 *   MyLog.d("TAG", message);
 * */

三、定义MyToast:


    自定义MyToast替换Toast,让提醒代码变的更加简洁点;

package cpj.com.MyTool;

import android.content.Context;
import android.widget.Toast;

/*
 * 打印Toast
 * */
public class MyToast {
	
	private static Context myContext = MyApplication.getContext();//获取当前的上下文

	/**
	 * 功能描述:短时间显示Toast
	 * 
	 * @param {String} msg 需要显示的信息
	 * */
	public static void MyToastShort(String msg){
		 Toast.makeText(myContext, "【Cpj提示】:"+msg, Toast.LENGTH_SHORT)
		    .show();
	}
	
	/**
	 * 功能描述:长时间显示Toast
	 * 
	 * @param {String} msg 需要显示的信息
	 * */
	public static void MyToastLong(String msg){
		 Toast.makeText(myContext, "【Cpj提示】:"+msg, Toast.LENGTH_LONG)
		    .show();
	}
	
	

}


四、自定义MyApplication:


    自定义MyApplication,随时随地找到上下文;

package cpj.com.MyTool;

import android.app.Application;
import android.content.Context;

/**
 * Created by cpj on 2016/4/12.
 * 类作用:管理程序中的全局变量-获取全局Context
 */
public class MyApplication extends Application{

    private static Context context;// 上下文

    /**
     * 方法描述:获取系统级别的Context
     * */
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    /**
     * 方法描述:供所有类调用-返回Context
     * */
    public static Context getContext(){
        return context;
    }
}

/**
 * Created by cpj on 2016/4/12.
 * 系统每次启动的时候,就会对Application类进行初始化。
 * 我们可以通过定义自己的MyApplication类来管理程序中的一些全局的状态信息
 * 如:获取全局Context
 * 记得在AndroidManifext.xml中将<Application></Application>指定为此类
 * 调用方法:MyApplication.getContext();
 */

五、自定义ActivityCollector:


    自定义ActivityCollector,来统一管理自己的活动,如:一键关闭所有活动等;

package cpj.com.MyTool;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by cpj on 2016/3/11.
 * 随时随地退出程序
 * 按住Home键只是挂起,并没有退出程序。
 * 我们只需做一个专门的集合类对所有的活动就行管理就可以:
 *  1. 用List暂存活动,用addActivity()向List中添加活动,用removeActivity方法从List中移除活动。
 *     用finishAll()将List中的所有活动全部销毁。
 */
public class ActivityCollector extends Activity{

    public static List<Activity> activities = new ArrayList<Activity>();

    /**
     * 向List中添加活动
     * */
    public static void addActivity(Activity activity){
        activities.add(activity);
    }

    /**
     * 从List中移除活动
     * */
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }

    /**
     * 将List中的所有活动全部销毁
     * */
    public static void finishAll(){
        for(Activity activity : activities){
            if(!activity.isFinishing()){//isFinishing()判断活动是否被销毁了
                activity.finish();
            }
        }
    }
}

六、自定义MyExceptions:


    自定义MyExceptions,来建立自己的异常处理机制;

package cpj.com.MyTool;

/**
 * Created by cpj on 2016/4/25.
 */
public class MyExceptions extends Exception{

    private String message;//错误信息

    public MyExceptions(String ErrorMessage){
        message = ErrorMessage;
    }

    /**
     * 方法描述:将错误信息以日志格式输出
     * */
    public void logErrorMessage(){
        MyLog.e("【Cpj自定义异常】",message);
    }

    /**
     * 方法描述:打印自己的错误信息栈
     * */
    public void logStackTrace(){

        StackTraceElement[] stacks = new Throwable().getStackTrace();

        StringBuffer sb = new StringBuffer();
        if(stacks.length < 1){
            MyLog.d("【Cpj自定义异常栈】","当前无异常");

        } else {
            sb.append("[\n")
              .append("【异常绝对位置】:" + stacks[0].getClassName()).append("\n")
              .append("【异常线程】:" + Thread.currentThread().getName()).append("\n")
              .append("【异常类名】:" + stacks[0].getFileName()).append("\n")
              .append("【异常方法】:" + stacks[0].getMethodName() + "()").append("\n")
              .append("【异常行数】:" + stacks[0].getLineNumber()).append("行\n")
              .append("]\n");
            MyLog.e("【Cpj自定义异常栈】", sb.toString());
        }
    }

}

自定义异常的使用(自定义Add()方法。如果加数或者被加数为负,则抛出异常):

package cpj.com.MyException;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import cpj.com.MyTool.BaseActivity;

import cpj.com.MyTool.MyExceptions;
import cpj.com.MyTool.MyLog;
import cpj.com.MyTool.MyToast;
import cpj.com.cpjtest.R;

/**
 * Created by cpj on 2016/4/25.
 */
public class MyException extends BaseActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myexception);

        //Button的点击事件-MyException
        Button exception_BT = (Button)findViewById(R.id.myException);
        exception_BT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    int c = Add(-1, 2);
                    MyLog.d("【c=】", c+"");

                //抛出自定义异常
                }catch (MyExceptions e){
                    e.logErrorMessage();
                    e.logStackTrace();

                //抛出别的异常
                }catch (Exception e){

                    e.printStackTrace();//指出异常的类型、性质、栈层及出现在程序中的位置

                }finally {
                    MyLog.d("【Finally】", "执行完成");
                    MyToast.MyToastShort("已执行");
                }

            }
        });
    }
    /**
     * 方法描述:1.自定义函数,用于测试异常的抛出,指定此方法有错的话就抛出自定义异常
     *          2.区别throws与throw
     * @param {int} a;
     * @param {int} b;
     *
     * */
    public int Add(int a, int b) throws MyExceptions {

        int c =0;

        if(a<0 || b<0){
            throw new MyExceptions("加数或者被加数不能为负数");
        } else{
            c = a + b;
        }

        return c;
    }
}


执行结果:(Logcat的打印)


附:throws、throw与try...catch 的区别与用法:

1. 基本定义:

  ①.throws 关键字通常被应用在声明方法时,用来指定方法可能抛出的异常;多个异常可以使用逗号分   
  ②.throw关键字通常用于方法体中,并且抛出一个异常对象。程序中执行到throw语句时立刻终止,它后面

的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用。throws关键字在方法的声明中指明要抛出的异常,如果要捕捉抛出的异常,则必须使用try...catch。


  ③.try...catch关键字用于捕获异常并处理异常;

2. throws与throw的区别:

  ①.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。


  ②.throws是对一个异常的声明;一般应用在声明方法时;
   如;上面的定义Add方法时,写到:Add(int a, int b) throws MyExceptions ;
       throw 可看做是一个抛出异常的语句;也就是说某条语句需要抛出异常;

   如:上面的,如果是负数,那我就抛出异常:throw new MyExceptions("加数或者被加数不能为负数")


  ③.throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

     throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。


  ④.throws说明你有那个可能,倾向(这个方法可能存在异常)。

     throw的话,那就是你把那个倾向变成真实的了(这条语句就是要抛出异常)。


  ⑤.throws与throw两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但他们并没有着手想办法去处理这种异常;而真正的处理异常的是函数上层调用者try...catch。

如:try{
      //无异常时执行  
   }catch(Exception e){
      //如果有异常那我在这里想办法处理
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值