• 我对Android理解

    2015-07-09 10:54:34
    前言写这篇文章是为了和大家描述下我对Android理解,同时会讲述下我后面的技术规划,希望能够对大家有点参考价值。大家都想学好Android,那么怎么才能学好呢?这个真不好说,但是我可以和大家交流下我自己的心得,...

    前言

    写这篇文章是为了和大家描述下我对Android的理解,同时会讲述下我后面的技术规划,希望能够对大家有点参考价值。大家都想学好Android,那么怎么才能学好呢?这个真不好说,但是我可以和大家交流下我自己的心得,当然仅限应用层开发,因为我本身是侧重应用层开发的。

    知识的分类

    Android中有很多知识点,虽然说大部分知识点都不难,但是量很多,这就会给人一种很琐碎的感觉。在这种情况下就要对知识进行分类,我对Android知识的分类为:
    1. 基本知识点
    比如四大组件如何使用、如何创建Service、如何进行布局等。这类知识是需要熟练掌握的。
    2. 稍微深入的知识点
    比如AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于高级开发者来说也是必须掌握的。
    3. 基本知识点的细节
    比如Activity的启动模式和标记位、Service同时处于start和bind状态时的停止问题、AsyncTask的同步异步问题以及使用时的限制等,这种问题还有很多。这类知识点,大家在开发过程中可以并不会去注意,这会导致一个问题,那就是开发应用没问题,但是在面试时面试官只要稍微问下细节或者特殊情况,就hold不住了。
    4. 系统核心机制
    比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式。这类知识对于高级开发者也是建议掌握的,因为它们可以让开发者理解Android的运行体系。
    5. 琐碎的知识点
    此类知识点我把它们定义为一些重要但是没有什么技术难度的问题,比如如何打开一个网页、如何打电话、如何发短信、如何定位、多点触控等,这类问题往往不好记忆,但是需要的时候去查一下就能立马搞定。

    类别 描述 开发者所需级别
    基本知识点 熟练掌握 初中级
    深入知识点 熟练掌握 中高级
    基本知识点的细节 掌握 高级
    系统核心机制 熟悉、掌握 高级、资深
    琐碎的知识点 了解 所有级别

    如何学习

    关于Android知识点的学习,无非就是看书、看官方文档,写代码等,这个是需要投入时间的。大家比较容易困惑的就是看Android源码,觉得“看不懂”,这是可以理解的。看源码的时候我们要侧重对流程的把握,刚开始时不要纠结太多的代码细节。有时候一遍看不懂的话就多看几遍,这样慢慢的就有眼熟了,眼熟后就能看懂了。另外看源码要讲究切入点,源码那么多从哪里开始下手呢?其实我建议先找一些自己感兴趣的切入点,比如大家有没有想过“Activity启动时,Activity的对象时在什么时候创建的?”这个问题,因为Java时面向对象的语言,所以Activity必须要创建一个对象,带着这个疑问去分析,一步步揭开谜团也是很有意思的事情。针对上面这个问题如何去分析Activity的对象到底是何时创建的呢,其实很简单,沿着Context的startActivity方法跟下去就好。采用这种方式去看源码,当看了一些主题后就会有一种贯穿的感觉,而这种感觉其实就是知识体系,这个知识体系是建立在Android的整体之上的。但是,不建议大家上去就看C层的源码,可等对源码有一定理解后再去看。关于琐碎的知识点,建议大家不好花费太多时间在上面,没有太大意义。

    要知其所以然

    在学习过程中,我们还要有质疑的精神。很多知识点我们掌握了,但是为什么是这样的,这个问题可能很多人并没有去想过。比如RemoteViews只支持有限的系统View,但是为什么呢?有没有想过?如果大家去想这个问题,那么就可以更好地理解RemoteViews的本质。再比如AsyncTask要求第一次访问这个类必须在UI线程,这一点我想大家都知道,但是为什么必须这样的?如果第一次访问AsyncTask在子线程会怎么样呢?带着这些疑问去思考去探索,那么你的技术档次就会更上一层楼。

    我的技术规划

    就我目前来说,我还有很多东西不太会,不管是Android还是其他技术。对于Android来说,源码我还需要更深入地看下去,同时我还需要去进一步学习Linux shell脚本以及Linux的内部实现,这样可以进一步地理解Android的实现,IOS我也需要稍微了解下,这样能够扩宽我的知识面,毕竟IOS也属于移动开发,但是我不会发很多精力去研究IOS,事实证明,“什么都擅长就等于什么都不擅长”,一个人要成为全栈工程师真的非常非常难,而且国内的招聘很多不需要全栈工程师,而且所谓的全栈工程师很可能在面试中就被淘汰(由于深度不够的原因)。我还会学习一些编译环境的搭建,比如Gradle、Gerrit等。按照这种规划去学习,我在Android就会达到一定深度并且有了Linux内核知识的支撑,然后了解IOS开发,同时还能搭建环境啥的,至于C、C++、Web开发之类的知识点,我在学校时就有初步的了解,这样一来,知识的广度和深度我都有,我认为应该是不错的规划。

    展开全文
  • 今天一早就看见了《阿里巴巴Android开发手册》开放下载的推送。该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者、技术爱好者开放,希望帮助开发者码出高效、码出质量,提升系统的质量、协作...

    今天一早就看见了《阿里巴巴Android开发手册》开放下载的推送。该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者、技术爱好者开放,希望帮助开发者码出高效、码出质量,提升系统的质量、协作的高效性。粗略翻阅一遍后,总结出部分规范。日后再当细读。下载地址:《阿里巴巴Android开发手册》下载

    前言

    《阿里巴巴 Android 开发手册》(以下简称《手册》)是阿里各大 Android 开发团队的集体智慧结晶和经验总结,将多个 App 长期开发迭代和优化经验系统地整理成册,以指导 Android 开发者更加高效、高质量地进行 App 开发。共同遵循同一开发规范,既是高效合作的基础,也是深度创新的开始。《手册》遵循《阿里巴巴 Java 开发手册》手册下载地址:https://yq.aliyun.com/articles/693 。以java为开发语言,制定相应规范,对kotlin等并未涉及。目录结构如下:

    《阿里巴巴Android开发手册》目录

    Android 资源文件命名与使用

    《手册》中推荐资源命名时增加模块前缀,以此区分,方便查找。drawable 资源名称以小写单词+下划线的方式命名,根据分辨率不同存放在不同的 drawable 目录下,建议只使用一套,例如 drawable-xhdpi。大分辨率图片(单维度超过 1000)大分辨率图片建议统一放在 xxhdpi 目录下管理,否则将导致占用内存成倍数增加。

    Android 基本组件

    Android 基本组件指 Activity、Fragment、Service、BroadcastReceiver、ContentProvider 等。《手册》进行了17点讲解,大致可以从3个角度来进行理解。

    从代码严谨度来考虑:

    以下几点都为了减少bug,因此都为强制:

    • Activity 间的数据通信,数据量较大时,避免使用 Intent + Parcelable的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。
    • Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常。
    • 避免在 Service#onStartCommand()/onBind()方法中执行耗时操作,如果确实有需求,应改用 IntentService 或采用其他异步机制完成。
    • 避免在 BroadcastReceiver#onReceive()中执行耗时操作,如果有耗时工作,应该创建 IntentService 完成,而不应该在 BroadcastReceiver 内创建子线程去做。
    • 不要在 Android 的 Application 对象中缓存数据。基础组件之间的数据共享请使用 Intent 等机制,也可使用 SharedPreferences 等数据持久化机制。
    • 使用 Adapter 的时候,如果你使用了 ViewHolder 做缓存,在 getView()的方法中无论这项 convertView 的每个子控件是否需要设置属性(比如某个 TextView设置的文本可能为 null,某个按钮的背景色为透明,某控件的颜色为透明等),都需要为其显式设置属性(Textview 的文本为空也需要设置 setText(“”),背景透明也需要设置),否则在滑动的过程中,因为 adapter item 复用的原因,会出现内容的显示错乱。
    • Activity或者 Fragment 中动态注册BroadCastReceiver 时,registerReceiver()和 unregisterReceiver()要成对出现。
      说明:如果 registerReceiver()和 unregisterReceiver()不成对出现,则可能导致已经注册的receiver 没有在合适的时机注销,导致内存泄漏,占用内存空间,加重 SystemService负担。部分华为的机型会对 receiver 进行资源管控,单个应用注册过多 receiver 会触发管控模块抛出异常,应用直接崩溃。

    从性能考虑:

    • 如非必须,避免使用嵌套的 Fragment。
    • 当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在 onPause 方法中不适合做耗时较长的工作,这会影响到页面之间的跳转效率。
    • 对于只用于应用内的广播,优先使用 LocalBroadcastManager 来进行注册和发送,LocalBroadcastManager 安全性更好,同时拥有更高的运行效率。说明:对于使用 Context#sendBroadcast()等方法发送全局广播的代码进行提示。如果该广播仅用于应用内,则可以使用 LocalBroadcastManager 来避免广播泄漏以及广播被拦截等安全问题,同时相对全局广播本地广播的更高效。
    • Service 需要以多线程来并发处理多个启动请求,建议使用 IntentService,可避免各种复杂的设置。说明:Service 组件一般运行主线程,应当避免耗时操作,如果有耗时操作应该在 Worker线程执行。 可以使用 IntentService 执行后台任务。
    • 总是使用显式 Intent 启动或者绑定 Service,且不要为服务声明 Intent Filter,保证应用的安全性。如果确实需要使用隐式调用,则可为 Service 提供 Intent Filter并从 Intent 中排除相应的组件名称,但必须搭配使用 Intent#setPackage()方法设置Intent 的指定包名,这样可以充分消除目标服务的不确定性。
    • 不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。
    • 添 加 Fragment 时 , 确 保 FragmentTransaction#commit() 在Activity#onPostResume()或者 FragmentActivity#onResumeFragments()内调用。不要随意使用 FragmentTransaction#commitAllowingStateLoss()来代替,任何commitAllowingStateLoss()的使用必须经过 code review,确保无负面影响。
    • Activity#onSaveInstanceState()方法不是 Activity 生命周期方法,也不保证一定会被调用。它是用来在 Activity 被意外销毁时保存 UI 状态的,只能用于保存临时性数据,例如 UI 控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储应该在 Activity#onPause()/onStop()中实行。

    从用户体验考虑:

    • 使用 Toast 时,建议定义一个全局的 Toast 对象,这样可以避免连续显示Toast 时不能取消上一次 Toast 消息的情况(如果你有连续弹出 Toast 的情况,避免使用 Toast.makeText)

    UI 与布局:

    这部分内容主要是一些基础规范,比如灵活使用布局,推荐 Merge、ViewStub 来优化布局,尽可能多的减少 UI
    布局层级,推荐使用 FrameLayout,LinearLayout、RelativeLayout 次之。

    展开全文
  • 由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。第1章 开发环境部署本章主要内容:简单介绍本书...

    由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。


    第1章 开发环境部署

    本章主要内容:

    简单介绍本书内容的架构、编译环境的搭建以及如何利用Eclipse调试SystemServer进程。

    1.1  系统架构

    到目前为止,Android系统的最新版本是4.0.3。而就在本书即将完稿之时,业界有传闻说Android 4.0.4版本已经对大厂商发布。Android系统推出速度之快让很多开发人员都很惊讶。当然,推出的速度如此之快有一些是出于商业上的考虑。不管怎样,Android系统在进化过程中,其大体架构相对保持稳定。图1-1为Android的系统架构图。


    图1-1  Android系统架构

    相信绝大多数读者对图1-1或类似图表的内容已经司空见惯。此处,我们就不再赘述。

    本书作为“深入理解Android”系列的第二卷,从内容上将承接《深入理解Android:卷I》(本书以后简称“卷I”)的内容,但是本书关注的焦点将从Native层Framework转移到Java层Framework。本书涵盖的内容如图1-2所示。


    图 1-2  本书涵盖的内容

    从图1-2中,读者可发现本书的大部分内容都在讨论Service。确实如此。因为Android Java层Framework的核心就是这些Service。毫不夸张地说,正是这些Service支撑了整个Java层世界的运转。读者可参考第3章的图3-1来了解Framework中Service的概貌。

    1.2  搭建开发环境

    本节将讨论Android 4.0源码下载、Eclipse开发环境,以及如何调试SystemServer进程等相关知识。

    1.2.1  下载源码

    Android 2.3以后,Google官方推荐使用64位的操作系统来编译源码。所以,读者要先安装64位的OS。笔者推荐的操作系统是Ubuntu 10.04 X86-64版。另外,读者不要随意升级Ubuntu,因为高版本Ubuntu中自带的GCC版本过高,会导致编译Android源码时出问题。

    提示其实32位的Ubuntu也可以编译Android 2.3以后的Android系统,但弄起来颇为麻烦,而且也没什么技术含量。笔者建议读者遵照官方要求去做即可。

    笔者不打算过多讨论Android源码下载的步骤,原因是:这是一个需要读者动手操作的过程,而看着电脑屏幕操作比看书后输入大串的字符串的效率要高很多。

    基于上面这个原因,这里笔者向读者提供一个官方说明文档,地址是http://source.android.com/source/downloading.html。该网页中有详细的代码下载步骤,读者只要执行简单的复制/粘贴操作即可动手实验。如图图1-3所示为该网页的截图。


    图1-3  Android代码下载网页示意图

    注意读者要选择下载Android 4.0.1的代码。虽然最新的Android 4.0.3版本从版本号上看变化不大,但实际代码却有较大变化。

    另外,由于网络环境不佳,如果读者发现本章提供的下载地址无法连接,可从笔者博客上的链接去下载源代码和工具,博客地址是:http://blog.csdn.net/innost/article/details/7525205

     

    1.2.2  编译源码

    1. 部署JDK

    Android 2.3及以后版本的代码编译都需要使用JDK1.6,所以首先要做的是下载JDK1.6。下载网址是http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html。笔者下载的文件是jdk-6u27-linux-x64.bin。把它放到一个目录中,比如将其放到/mnt/hgfs/E目录下,然后在这个目录中执行:

    ./ jdk-6u27-linux-x64.bin  #执行这个文件

    这个命令的作用其实就是解压。解压后的结果在/mnt/hgfs/E/jdk1.6.0_27目录中。有了JDK后,还需要设置~/.bashrc文件。在该文件末尾添加如图1-4所示的几行语句:


    图1-4  Java环境部署示意图

    重新登录系统后,Java环境就添加到系统中了。

    2. 编译源码

    源码编译的步骤非常简单。我们在卷I也详细介绍编译方法。不过本书要求读者必须先编译整个系统,步骤如下:

    ·  执行source build/envsetup.sh命令。该命令将导入Android编译环境。

    ·  输入choosecombo并执行,它是envsetup.sh中定义的一个函数。在执行过程中,分别选择release、generic、eng即可。最终屏幕输出如图1-5所示。  


    图1-5  编译设置效果图

    ·  执行make命令以编译整个系统。编译时间由机器配置决定。笔者的4核4GB机器的编译时间大概在2小时左右。

    1.2.3  利用Eclipse调试SystemServer

    本节将介绍如何利用Eclipse来调试Android Java Framework的核心进程SystemServer。

    1.  配置Eclipse

    首先要下载Android SDK。下载地址为http://developer.android.com/sdk/index.html。在Linux环境下,该网站截图如图1-6所示。


    图1-6 AndroidSDK下载网页示意图

    笔者下载的是Linux系统上的SDK。解压后的位置在/thunderst/disk/anroid/android-sdk-linux_x86下。

    然后要为Eclipse安装ADT插件(Android Development Tools),步骤如下。

    ·  单击Eclipse菜单栏Help->Install New Software,输入Android ADT下载地址:https://dl-ssl.google.com/android/eclipse/,然后安装其中的所有组件,并重启Eclipse。

    ·  单击Eclipse菜单栏Preferences->Android一栏,在右边的SDK Location中输入刚才解压SDK后得到的目录,即笔者设置的/thunderst/disk/anroid/android-sdk-linux_x86,最终结果如图1-7所示。


    图1-7  SDK安装示意图

    ·  单击Eclipse菜单栏Window->Android SDK Manager,弹出一个对话框,如图1-8所示。


    图1-8  Android SDK Manager对话框

    在图1-8中选择下载其中的Tools和对应版本的SDK文档、镜像文件、开发包等。有条件的读者可以将Android 4.0.3和4.0对应的内容及Tools全部下载过来。

    2.  使用Coffee Bytes Java插件

    Coffee BytesJava是Eclipse的一个插件,用于对代码进行折叠,其功能比Eclipse自带的代码折叠功能强大多了。对于大段代码的研究,该插件的作用功不可没。此插件的安装和配置步骤如下:

    ·  单击Eclipse菜单栏Help->Install New Software,在弹出的对话框中输入http://eclipse.realjenius.com/update-site,选择安装这个插件即可。

    ·  单击Eclipse菜单栏Window->Preference,在左上角输入Folding进行搜索,结果如图1-9所示。


    图1-9  Coffee Bytes Java 插件配置

    在图1-9所示的对话框中,要先打开Enablefolding选项,然后从Select foldingto use框中选择CoffeeBytes Java Folding。图1-9右下部分的勾选框用来配置此插件的代码折叠功能。读者不妨按照图1-9所示来配置它。使用该插件后的示意图如图1-10所示。

    如果不关心else if分支,就可以把这段代码折叠起来


    图1-10  Coffee Bytes Java插件的使用示例

    从图1-10中可看到,使用该插件后,基本上代码中所有分支都可以折叠起来,该功能将帮助开发人员集中精力关注自己所关心的分支。

    3.  导入Android源码

    注意,这一步必须编译完整个Android源码才可以实施,步骤如下:

    ·  复制Android源码目录/development/ide/eclipse/.classpath到Android源码根目录。

    ·  打开Andriod源码根目录下的.classpath文件。该文件是供Eclipse使用的,其中保存的是源码目录中各个模块的路径。由于我们只关心Framework相关的模块,因此可以把一些不是Framework的目录从该文件中注释掉。同时,去掉不必要的模块也可加快Android源码导入速度。图1-11所示为该文件的部分内容。


    图1-11.classpath文件部分文件内容

    另外,一些不必要的模块会导致后续在Eclipse中Android源码编译失败。笔者共享了一个.classpath文件,读者可从http://download.csdn.net/detail/innost/4247578下载并直接使用。

    单击Eclipse菜单栏New->Java Project,弹出如图1-12所示的对话框。设置Location为Android4.0源码所在路径。


    图1-12  导入Android源码示意图

    由于Android 4.0源码文件较多,导入过程会持续较长一段时间,大概10几分钟左右。

    注意导入源码前一定要取消Eclipse的自动编译选项(通过菜单栏Project->BuildProject Automatically设置)。另外,源码导入完毕后,读者千万不要清理(clean)这个工程。清理会删除之前源码编译所生成的文件,导致后续又得重新编译Android系统了。

    4.  创建并运行模拟器

    单击Eclipse菜单栏Window->AVD Manager,创建模拟器,如图1-13所示。


    图1-13  模拟器创建示意图

    模拟器创建完毕后即可启动它。

    5.  调试SystemServer

    调试SystemServer的步骤如下:

    ·  首先编译Android源码工程。编译过程中会有很多警告。如果有错误,大部分原因是.classpath文件将不需要的模块包含了进来。读者可根据Eclipse的提示做相应处理。笔者配置的几台机器基本都是一次配置就成功了。

    ·  在Android源码工程上单击右键,依次单击Debug As->Debug Configurations,弹出如图1-14所示的对话框,然后从左边找到RemoteJava Application一栏。


    图1-14  Debug配置框示意图

    ·  单击图1-14中黑框中的新建按钮,然后按图1-15中的黑框中的内容来设置该对话框。


    图1-15  Remote Java Application配置示意图

    由图1-15所示,需要选择Remote调试端口号为8600,Host类型为localhost。8600是SystemServer进程的调试端口号。Eclipse一旦连接到该端口,即可通过JDWP协议来调试SystemServer。

    ·  配置完毕后,单击图1-15右下角的Debug按钮,即可启动SystemServer的调试。

    图1-16所示为笔者调试startActivity流程的示意图。


    图1-16  SystemServer调试效果图

    1.3  本章小结

    本章对Android系统和源码搭建,以及如何利用Eclipse调试SystemServer等做了相关介绍,相信读者现在已经迫不及待了吧?马上开始我们的源码征程!

    展开全文
  • 深入理解Android 卷I 扫描完整版
  • 在各种技术之间相互借鉴,有助于我们理解Android应用开发模式的一些设计思路。下面我总结一下在Android应用开发中我对一些概念的理解。 1、开发Android应用程序时界面资源通过XML文件来定义,可以与Java源码分离,...

    Android应用、Window应用和Web应用这3种应用是我们目前比较主流的应用程序开发类型,其实他们之间的设计思路有许多相同的地方,也有不同的地方。在各种技术之间相互借鉴,有助于我们理解Android应用开发模式的一些设计思路。下面总结一下我在Android应用开发学习过程中对一些概念的理解。

    1、开发Android应用程序时界面资源通过XML文件来定义,可以与Java源码分离,同时自动在R.java生成一个整形ID,在Java源码中可以通过这个ID来这个资源,使得对这些资源操控变得容易。在界面定义上3种应用比较类似,Window应用界面也有专门的资源文件,程序中可以引用修改,Web应用界面通过HTML来定义,然后在Javascript中可以对DOM树进行操作,对界面进行修改。

    2、ContentProvider封装屏蔽了不同底层数据访问方式的差异,将自己通过AndroidManifest.xml注册到系统中,并提供统一的RESTful风格的URL,客户端通过这个URL来访问ContentProvider中的数据,访问的方式类似于数据库访问,使得应用程序之间的数据传递变得容易和统一,同JDBC的访问方式有些类似。

    3、Intent定义了在一个活动中调用另外一个活动的机制,先定义Intent来指定调用哪一个活动及携带的操作数据,然后用这个Intent与xml配置文件中活动所配置的Intent过滤器进行匹配,如果匹配上,就启动这个活动,调用服务和广播时也类似。

    4、UI开发可以使用代码创建方式或XML定义方式,比较灵活,通常会用XML方式定义活动视图,然后用代码来给视图设置数据,设置数据的方式是定义适配器,然后再把适配器附加到视图上。不论是Windows应用还是Web应用对UI的定义,都提供了UI文件定义和代码获取UI定义部件然后修改两种方式。

    5、活动使用布局管理器来组织排布各个视图,很多UI系统都会使用类似布局管理器的东西来组织UI组件。

    6、碎片实现对活动的分隔,类似于Windows应用程序里的框架窗口,可以在活动中划分出几个独立的区域,同时由于屏幕可以做横屏竖屏转换,所以碎片在活动中的布局要做不同处理。

    7、因为移动设备支持返回按键,所以启动一个新的活动或碎片时,旧的活动或者碎片要保存在一个返回栈中,这样当从新活动或者碎片退出时,旧的活动或者碎片能够重新显示,这种需求对于桌面应用程序是不存在的,可能类似于浏览器实现Web页面跳转的后退机制。

    8、应用需要签名和4字节对齐后才能安装到手机上,这样能够避免他人用其它应用来升级你的应用;活动可以设定访问公共组件的权限,或者设定自己能被其他活动访问所需要的权限,没有权限的访问会导致错误,活动也可以通过ContentProvider把访问权限传递给另一个活动。安全性的保护算是Android应用的一个特点,Windows应用和Web应用没有定义这样安全机制。

    9、AsyncTask在主线程提交任务到后台线程池执行,同时在主线程创建一个Handler,任务在后台执行时,可以通过向主线程的Handler发消息,Handler监听到消息后触发一些回调函数在主线程执行,从而实现任务处理过程中对界面的更新。

    10、本地服务只可以被同一应用程序调用,而AIDL服务可以被另外的应用程序调用,并且可以通过Pracelable在客户端和AIDL服务之间传递复杂数据,服务通常运行在主线程上,它不会自动创建子线程,需要运行超过5s的任务需要手动创建子线程来执行。

    11、一个包通常是一个应用程序,两个包使用相同的用户id时可以互相访问对方的数据。可以建立专门的库项目,然后被其他的项目所包含。

    12、处理程序通过放置一个消息到应用程序主线程队列中,后续队列处理这个消息时,能够回调执行相应的处理程序。

    13、工作线程在主线程创建一个Handler,然后把Handler传给工作线程,工作线程执行时给Hanlder发消息,Handler监听到消息后再执行相应的处理。它与AsyncTask的区别是AsyncTask是封装好的线程池,比起工作线程的方式,AsyncTask在操作主线程上更方便,因为onPreExecute()、onPostExecute()及更新主线程方法onProgressUpdate()均运行在主线程中,这样就不用给Handler发消息处理了。

    14、广播接收程序通过AndroidManifest.xml将自身注册到到系统中后(也可通过程序注册到系统中),就可以接受并处理客户端进程发送的广播消息,它可以运行在客户端进程内或者进程外的独立进程。

    15、通知是先设置内容视图,再定义一个Intent,然后调用通知管理器,把通知发送出去,当用户点击通知时,会触发调用之前定义的Intent。

    16、要长时间运行广播接收程序,需要启动一个服务,然后由服务启动一个线程,通过给这个线程发送消息,来驱动线程处理需要长时间运行的任务。

    17、主屏幕部件类似于Windows系统上的快捷方式,但不同的是还可以定期更新一些显示数据,是一种与底层数据完全分离的远程视图。它是一个Android应用程序,通过定义一个部件接收程序以及相关联的配置视图,当部件接收程序第一次启动时会调用相应的配置视图,配置视图取得用户输入信息后更新部件视图,后续当部件接收程序被系统定期更新时,会取得相应的更新数据并更新部件视图,从而达到定期更新显示数据的效果。

    (完)

    展开全文
  • android开发时下很流行,且工资高需求量大。随便大街上看一堆人手里都是拿着android手机,屌丝嘛我也是用android手机的,便宜嘛,不好用了不好看了换个。 android手机类等移动产品数不甚数,android产品百花齐放...

    Android开发到底做什么?

    android开发时下很流行,且工资高需求量大。随便大街上看一堆人手里都是拿着android手机,屌丝嘛我也是用android手机的,便宜嘛,不好用了不好看了换个。

    android手机类等移动产品数不甚数,android产品百花齐放自然android开发需要就上来了,android开发工程师诚聘待遇高福利好就等你来了。是不是这样的呢?我们就多目前流行的android开发来聊聊。以下纯属个人观点。

    app开发

    俗称应用程序开发,如window上的一款应用如Edge(浏览器),在android上就如今日头条,大众点评这类应用。我理解完成一定功能的程序,今日头条咨询给力,大众点评生活给力。对于开发者来讲就是用android api进行开发(大部分使用java开发),这类开发是目前主流的android开发。主要针对的终端开发,手机平板。但在这些应用后面的工作那也是相当庞大的,大数据管理等等,一个终端应用加上一个大数据管理。正真的app就酱紫。

    Android开发到底做什么?

    做手机

    这个也是大流自重有了小米后中国的手机如雨后春笋般的崛起,好处是我等屌丝亲身感觉到的,以前动辄几千的手机也是几百搞定用的功能都一样,价格贵点可能就是不死机,不用重启,流畅些。android手机开发也是一大块,android手机开发又有那些工作做呢?UI定制,国内的都这么叫什么什么系统,其实就是一个UI,非得吹成OS拿大家当小白,骗情怀。手机开发又分几个部分,

    1、底层开发就是内核定制驱动开发

    就是拿着cpu芯片提供的android sdk 加上一些自选器件的驱动不过一般的器件驱动android都包含了。当然这个玩不好那手机各种不稳定你懂的,国内某些手机厂商习惯了拿来主要,只要外观好还是有人买账的。

    2、android framework

    基本上扩展些接口,开机,升级,植入自己的东西。(小编水平有限错误请很批)android 本身是很强大的这一层的东西都是十八般武器,有兴趣自己可以深入研究。

    3、UI定制

    这个就是把android原生的UI推到重来,这个叫中国特色,UI定制其实工作是很多的,好不好用(死机重启除外)这个是关键,想得够多做得够细,好用符合习惯是硬道理,UI定制类似与app开发,是把硬件本身能提供的东西更好的让使用者使用。

    Android开发到底做什么?

    智能设备

    这个市场就比较大了给个插座装上个android系统它就叫智能插座了,高大上的有木有。不过目前搞得比较火的是智能电视,买不起智能电视的来个智能机顶盒嘛。那我们就来普及一下智能机顶盒用android如何开发? 其实大体思路是跟手机开发一样一样的。更是简单很多,launcher 要做成运营商的样子,它可不管用户好不好用,你不看,我免费送你你看不看。大家应该明白我说的吧。

    除了这些还又就是各大互联网巨头都要占领的地盘移动浏览器,在chromium加个壳,那它也能是忍者神龟。虽然是在chromium上加了个壳但是没有但技术实力,这个马甲还是不好穿的。

    Android开发到底做什么?

    纵观满城都是android开发,需求嘛!小伙伴你准备来搞搞android开发了吗?

    良心的公众号,更多精品文章,不要忘记关注哈

    《Android和Java技术栈》


    展开全文
  • Android早期由“Android之父”之称的Andy Rubin创办,Google于2005年并购了成立仅22个月的高科技企业Android,展开了短信、手机检索、定位等业务,基于Linux的通用平台进入了开发……简史我就不多叙了,大家想了解...
  • 线程池算是Android开发中非常常用的一个东西了,只要涉及到线程的地方,大多数情况下都会涉及到线程池。Android开发中线程池的使用和Java中线程池的使用基本一致。那么今天我想来总结一下Android开发中线程池的使用...
  • Android开发技术兴起以来,越来越多的年轻人开始投身于Android领域。我们通过网络了解到,在入门Android开发领域时,往往不得其法而浪费大量精力和时间,所以我们为Android开发小白总结了一些要点: 1、基础打...
  • 为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作以下学习路线图;希望能帮助到广大的android爱好者。 在开始之前我们先来对相关知识进行一个简单的了解: ...
  • 1、引言 对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现: 自定义一个CustomView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元素 在布局文件中CustomView使用...
  • 《深入理解Android 卷III》即将发布,作者是张大伟。此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲究颜值的时代,本书分析了Android 4.2中...
  • c#开发Android应用实战

    2020-07-11 17:39:07
    您将深入理解屏幕控件、UI开发、表、布局和MonoDevelop等知识点,并驾轻就熟地使用Mono for Android来规划、构建和开发Android应用程序。 主要内容 ◆ 介绍如何使用您已经掌握的C# 和.NET技术来构建Android app ◆ ...
  • 作为一个Android开发人员来说,一款好的开发工具也是相当重要的,在相当长的时间礼,Google都是基于Eclipse以ADT插件的形式来开发Android应用的,Eclipse可谓是经典到不能再经典的开发工具了,他几乎什么都可以干,...
  • 这片文章发布,代表着我已经把本书和看完并且笔记...Android开发艺术探索——新的征程,程序人生路漫漫! Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式 Android开发艺术探索——第二章:IPC...
  • 由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。(出版社排版好的PDF版正在向出版社申请,到时候...
  • 前言本篇博客从开发的角度来介绍如何开发一个Android App,需要说明一点是,这里只是提供一个如何开发一个app的思路,并不会介绍很多技术上的细节,从整个大局去把握如何去构思一个app的开发,让你对独立开发一款app...
  • Android开发入门基础

    2017-09-18 16:19:25
    Android是基于Linux的修改版本的移动操作系统。 大多数Android代码是在开源Apache许可证下发布的。本文将简单介绍Android开发入门知识。
  • 写在前面 距离上次写博客还是在几个月以前了,最近几个月实在是太忙了,跑去做课设和ios开发,短暂地告别了Android...Android开发过程中,应该说Wifi是很重要的一个功能,在产品中,可能需要随时监听网络状况的变化等
  • 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方法,希望对更多想进入这个...
1 2 3 4 5 ... 20
收藏数 156,978
精华内容 62,791