一、定制自己的日志工具 代码如下:
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);
}
}
}
原理: 1、首先定义了七个常量,其中前五个根据日志等级由低到高赋值;level可以指定为上面6个常量中的任意一个 2、然后写了五个方法,每个方法对应于日志中的一个方法,并进行一个判断,level的值是否小于指定的方法的日志值,若小于就可以打印日志,调用方法:LogUtil.d("TAG","debug log") 3、当将level的值指定为VERBOSE时,所有的日志都可以打印出来;若指定为NOTHING,则所有的日志都不能够打印
二、断点调试Android程序 1、添加断点的方式 2、启动调试 启动以后,会出现如下弹窗 4、打开debug界面,按F8代码就会向下执行一行,通过Variables试图可看到内存中的数据 5、此外,若是断点执行的代码位置很靠后,则可以用如下方法:直接运行程序,在程序运行成功后,点击如下按钮 就会出现如下界面 点击“OK”,该进程就会直接进入到调试模式 三、创建定时任务 3.1 Alarm机制 背景:每个手机都有自己的休眠策略,在长时间不操作的情况下会自动让CPU进入到休眠状态,而Alarm机制具有唤醒CPU的功能 用法:
- 1、首先通过借助AlarmManager 类来实现,通过调用Context的getSystemService()方法来获取实例
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
- 2、接着调用AlarmManager的set()方法用于设置一个定时任务,
long triggerAtTime = SystemClock.elapsedRealtime() + 10 *1000;
manager.set(AlarmManager.ELAPSED_REALTIME,triggerAtTime,intent2);
① 这里首先设定了一个任务在10秒后执行
② set()方法中传入了三个参数:
第一个参数用于指定AlarmManager的工作类型:ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUP、RTC、RTC_WAKEUP,其中
ELAPSED_REALTIME表示让定时任务的触发时间从系统开机开始算起,但不会唤醒CPU
ELAPSED_REALTIME_WAKEUP表示让定时任务的触发时间从系统开机开始算起,会唤醒CPU
RTC表示让定时任务的触发时间从1970.1.1 0点开始算起,但不会唤醒CPU
RTC_WAKEUP表示让定时任务的触发时间从1970.1.1 0点开始算起,会唤醒CPU;
其中:SystemClock.elapsedRealtime()可获取到系统开机至今所经历时间的毫秒数;SystemClock.currentTimeMillis()可获取到从1970.1.1 0点至今所经历时间的毫秒数
第二个参数用于指定定时任务触发的时间,以毫秒为单位
第三个参数是一个PendingIntent对象,用于指定处理定时任务的服务
③ set()方法下Alarm任务的触发时间会变得不准确,这是由于系统在耗电性方面进行优化,可以采用setExact()方法使得Alarm任务的触发时间必须准确无误
public class AutoUpdateService extends Service {
public AutoUpdateService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int anHour = 30 * 60 * 1000;
long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
Intent intent1 = new Intent(this,AutoUpdateService.class);
PendingIntent intent2 = PendingIntent.getService(this,0,intent1,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,intent2);
return super.onStartCommand(intent, flags, startId);
}
}
3.2 Doze模式 1、目的:极大幅度的演唱电池的使用寿命 2、工作过程: 3、在Doze模式下,系统会对CPU、网络、Alarm等活动进行限制;退出该模式后,则可以执行同步操作、Alarm任务等,具体在Doze模式下被限制的功能: 4、其中最后一点可以通过AlarmManager的setAndAllowWhileIdle()或setExacttAndAllowWhileIdle()方法实现定时任务在Doze模式下也能正常执行,这两个方法的区别跟set()和setExact()方法的区别是一样的 四、多窗口模式 1、多窗口模式下的生命周期:
- 1)一个应用从正常运行状态进入到多窗口状态时,首先活动会被回收,接着又会重新创建
- 2)另一个应用在进入多窗口模式,原来的应用会自动暂停
- 3)一般情况下,执行哪一个应用时另一个应用就会暂停
2、若要改变进入多窗口模式时活动会被重新创建的默认行为,在注册文件中的指定活动的注册标签下进行配置如下语句:
android:configChanges = "orientation|keyboardHidden|screenSize|screenLayout"
3、关于禁用多窗口模式,只需要在注册文件中application标签或者activity标签里添加如下语句即可:
android:resizeableActivity = "false"
4、注意,上述禁用方式只适合Android的SDK版本>=24时才会有用,对于版本<24的应用,我们将活动设定为不允许横竖屏切换,也可以实现禁用多窗口模式
android:screenOrientation = "portrait"(只支持竖屏) or "landscape"(只支持横屏)
五、Lambda表达式 详细学习:菜鸟教程 Lambda表达式 本质:是一种匿名方法,既没有方法名,也没有访问修饰符和返回值类型 适用范围:凡是只有一个待实现方法的接口,都可以适用Lambda表达式的写法 具体实施:
定义:
MyListener listener{
String doSomething(String a,int b);
}
Lambda表达是实现:
MyListener listener = (String a,int b)->{
return a+b;
};
或者
MyListener listener = (a,b)->{
return a+b;
};
或
MyListener listener = (a,b)-> a+b
|