26
2017
09

Android小技巧

来源:郭霖——《第一行代码》(第二版)


全局获取Context

自定义一个MyApplication类,继承自Application。

public class MyApplication extends Application{
    private static Context context;

    public void onCreate(){
        context = getApplication();
    }

    public static Context getApplication(){
        return context;
    }
}

在AndroidManifest文件的application标签的name属性上设置好我们的Application即可。

<application name="package.MyApplication" 
    …
/>

定制自己的日志工具

控制静态变量level等级,使得不同等级的Log得以显示

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 = 3;
    public static final int ERROR = 3;
    public static final int NOTHING = 3;

    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.v(tag,msg);
        }
    }

    public static void i(String tag,String msg){
        if(level <= INFO){
            Log.v(tag,msg);
        }
    }

    public static void w(String tag,String msg){
        if(level <= WARN){
            Log.v(tag,msg);
        }
    }

    public static void e(String tag,String msg){
        if(level <= ERROR){
            Log.v(tag,msg);
        }
    }
}

创建定时任务

Timer并不会唤醒Cpu,所以在使用Timer创建长时间执行的任务时,有可能不会被执行,这时候应该使用Alarm来执行长时间任务。

//设置定时时间到的意图
        Intent intent = new Intent(this,FruitActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
        //获取时钟管理器
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        //设置定时时间方式1,设定时间10秒
        long triggerAtTime = SystemClock.elapsedRealtime() + 10*1000;
        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pendingIntent);
        //设置定时时间方式2,设定时间10秒
        triggerAtTime = SystemClock.currentThreadTimeMillis() + 10*1000;
        alarmManager.set(AlarmManager.RTC_WAKEUP,triggerAtTime,pendingIntent);
        //4.4版本以上 由于耗电优化,set是不准确的,准确的方式是调用setExact();
        alarmManager.setExact(AlarmManager.RTC_WAKEUP,triggerAtTime,pendingIntent);

Doze模式

在Android6.0以上,如果设备满足未在充电,屏幕关闭一段时间,设备静止(7.0被删除)条件下,会进入Doze模式,控制CPU,网络,Alarm等活动进行限制,延迟电池寿命。会间歇退出一小段时间进行同步。

上一篇:Da 下一篇:【Android开发点滴】Android Studio常用快捷键