经验总结:Android通过AlarmManager开发闹钟功能

背景 刚开始听到需求要做闹钟功能的时候,我是拒绝的,虽然闹钟程序功能很简单,但是要在Android系统中(特别是国产手机)开发自己的闹钟,这会面临许多不可抗拒的问题,吓得我冷汗直流。然而经过一段时间的研究,把在这个过程中收获的小小经验分享给大家。 面临的问题 1.闹钟需要后台常驻,手机关机重启后需要自启动,这两点在国产手机中如果不手动设置是不可能实现的; 2.需要和AlarmManager打交道,程序完全退出后,AlarmManager设置的定时任务也将被清除,App重新启动后需要重新设置; 3.无法查看AlarmManager已经设置好的定时任务,对闹钟的增删改查需要同时维护AlarmManager中的定时任务; 4.用户修改手机时间造成的影响; »

Android的事件分发机制源码解析

为什么需要事件分发机制 我们的Android布局中是由各种ViewGroup和View组成的,ViewGroup包含着各种View(ViewGroup也是View),这些View可能互相重叠,当我们点击手机屏幕产生了点击事件,这个事件要由该点击区域的那个View来接收响应呢?是外层的ViewGroup,还是内层的子View,这时事件分发机制的作用就体现了。 概念 在介绍点击事件的传递规则之前,我们要明白这里要分析的对象就是MotionEvent,所谓点击事件的分发就是对MotionEvent事件的分发过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递过程就是事件分发过程。 首先介绍与事件分发相关的三个重要方法: public boolean dispatchTouchEvent(MotionEvent ev); 事件分发的入口,如果事件能传递给当前View,那么此方法一定会被调用, »

Android TaskAffinity实践详解

介绍 其实一直以来都知道在AndroidManifest的Activity中可以配置TaskAffinity这个属性,只知道这个东西和Activity的任务栈有关,今天花了点时间好好学习了一些这个东西。 launchMode(启动模式) Activity的任务栈是我们很熟悉的了,它是一种后进先出的结构。位于栈顶的Activity处于焦点状态,当按下back按钮的时候,栈内的Activity会一个一个的出栈,并且调用其onDestory()方法。如果栈内没有Activity,那么系统就会回收这个栈,每个APP默认只有一个栈,以APP的包名来命名. standard: 标准模式,每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart( »

[转] 图解 Android 事件分发机制

转自:http://www.jianshu.com/p/e99b5e8bd67b 为什么转载这篇文章?因为它能让你很容易的把事件分发记在你的脑海,感觉自己写不出比这更好的文章了,推荐! 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。 Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明, »

Android复用layout——include、ViewStub、merge的区别

开始 我们知道Android布局中的include、ViewStub和merge都是为了优化布局使用的,那么这三者有什么区别,他们各适用于什么场合呢? include include标签是抽取layout并复用,比如我们App中的标题栏,这时候我们就可以把titlebar的布局提取到一个layout,然后用include标签引用,这样也便于我们日后的统一修改。 <include id="+id/title_bar" layout_width="match_parent" layout_height="wrap_content" layout= »