1.日志打印帮助类
//打印帮助类 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 final 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); } } }
2:获取全局的context
//记得在清单文件里进行指定,要加完整的包名 public class MyApplication extends Application { private static Context context; @Override public void onCreate() { context = getApplicationContext(); } // 全局获取context public static Context getContext() { return context; } }3.定时任务
//创建定时任务 /** * 定时任务一般有两种 java里的Timer和android的Alarm机制,效果差不多 * 但是timer不适合长时间在后台运行的定时任务,因为手机都有省电措施,在长时间不用,手机就会 * 自动让cup睡眠,这样timer可能无法使用,Alarm具有唤醒cpu功能,大多数情况下都能正常用 * 唤醒cpu和唤醒屏幕不一样。 */ public class TimeService extends Service { public TimeService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { // 这里执行具体逻辑操作 } }).start(); // 下面执行:一旦这个服务被启动了,就可以保证这个服务的onStartCommand方法每隔一小时执行一次。 AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); int anHour = 60 * 60 * 1000;//这是一小时的毫秒数 // SystemClock.elapsedRealtime()获取到系统开机至今 // System.currentTimeMillis()获取1970-1-1 0点至今所经历的毫秒数 long triggerAtTime = SystemClock.elapsedRealtime() + anHour; Intent i = new Intent(this, TimeService.class); PendingIntent pi = PendingIntent.getService(this, 0, i, 0); // 参数1:指定AlarmManager的工作类型,有四种可选 // (1)ELAPSED_REALTIME_WAKEUP: 让定时任务的触发时间从系统开机算起,会唤醒cpu // (2)ELAPSED_REALTIME:让定时任务的触发时间从系统开机算起,但不会唤醒cpu // (3)RTC表示从1970-1-1 0点开始算,不唤醒cpu // (4) RTC_WAKEUP表示从1970-1-1 0点开始算,唤醒cpu // 参数2:定时任务触发的时间,如果1是开机时间算起,则这个时间是开启时间至今加触发时间,如果是1970那个计算方式类似 // 参数3:这里调用getService方法或者getBroadcast来获取一个能够执行服务或广播的PendingIntent // 这样当任务被触发时,服务的onStartCommand方法或广播接收者的onReceive()才能得到执行 // 注意这里android4.4 Alarm时间变得不准确,要准确的换把set换成setExact.这是为了省电,系统会自动检测目前的alarm将触发时间 // 相近的任务放在一起执行,这样可以减少cpu唤醒次数达到省电。 manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi); return super.onStartCommand(intent, flags, startId); } /** * Doze模式 * 当用户是6.0以上系统时,如果改设备未插电源,处于屏幕关闭一段时间后,就会进入Doze模式 * 他是间歇性出现的,设备进入Doze模式时间越长,间歇性退出Doze模式时间间隔也会越长。Doze * 会(1)禁止访问网络。(2)忽略唤醒cpu或者屏幕(3)不再执行wifi扫描(4)不再执行同步服务 * (5)alarm任务将会在下次退出Doze模式的时候才执行。这时候又会导致alarm不准时。将set换成 * setAndAllowWhileIdle或者setExactAndAllowWhileIdle */ }