1.Android开发的四大组件:

  • Activity:android应用程序上看到的一页。
  • Service:运行在后台,可以其他组件交互(音乐播放器)。
  • BroadcoastReceiver:用来对外部事件作响应(电话呼入)。
  • ContentProvider:对外提供资源,手机上各个APP之间进行资源共享。

2.Activity的生命周期:onCreate()——>onStart()——>onResume()——>onPause()——>onStop()——>onDestroy().

  • Activity处于运行状态:启动一个Activity会调用:onCreate()——>onStart()——>onResume().
  • Activity从后台回到前台,系统调用onRestart()——>onStart()——>onResume().。
  • 当Activity后台不可见或者被覆盖掉了,内存不足被killed,能启动Activity。
  • Activty处于停止状态:Activity退居后台(跳转其他Activity或者按下home键回到主屏)会调用:onSavedInstanceState()(保存当前view组件的状态)——>onPause()——>onStop().
  • Activity处于结束状态:当用户退出Activity时,系统调用onPause()——>onStop()——>onDestory()结束当前Activity。

3.Handler机制:Handler,Looper和MessageQueue三者直接的关系,就是,在Looper实例化的同时创建了与之一一对应的MessageQueue,必须有了Looper实例才能创建Handler。在主线程中自带Looper实例,可以直接创建,而子线程中却不能,必须同过Looper.prepare()来创建唯一Looper实例。Handler消息发送机制就是:Handler将消息发送到MessageQueue队列中,通过Looper.loop()从MessageQueue中取出通过Handler中的HandlerMessage()将消息当做参数传递出去。

A.Handler和Looper之间的关系:

  • 在主线程即:UI线程中自动通过Looper.getMainLooper()获取主UI线程中的looper实例(这个looper实例中创建了一个消息队列(消息队列中传递的参数是quiteAllowed这个值默认为true),将当前线程的引用实例)。可以直接创建Handler对象。
  • 在子线程中:要通过Looper.prepare()来获取当前线程的Looper实例(Looper.myLooper()获取),与上面不同的是quiteAllowed的值是flase,因此可以同过looper.quite(),来结束上面图中的死循环。而主线程中却不可以通过这条语句结束循环。必须要调用Looper.prepare(),创建Looper实例之后再创建Handler对象,否则会抛出无Looper异常。

B.Looper和线程的关系,每个线程中只能有一个Looper,抛出异常。

C.Looper,Handler和MessageQueue之间的关系:Looper和MessageQueue一一对应,而可以创建多个handler。

D.Handler消息发送,接收机制:

  • Handler发送消息的实质就是把消息Message添加到MessageQueue中,按照时间的先后将消息插入(调用MessageQueue中的enqueueMassage()方法进行插入)到队列中,SendMessageAtFrontOfQueue实际上就是放在对头的意思。
  • 通过Looper.loop()这个方法取出MessageQueue消息队列中的消息通过handler接收发送(调用Handler的dispatchMessage方法来发送)消息。先看一下mCallBack是否为空,不为空则低昂呀mCallBack中的HandlerMassage()方法将消息对象传递出去。如果为空,直接调用HandlerMessage()方法,将消息对象作为参数传递出去。

为什么要使用Handler来刷新页面?

在Android里面有两种线程一种是home线程,一种是work线程,Android机制规定home进程如果在五秒内没有响应就会出现ANR(Android Not Response)。所以一些耗时操作最好是放在Handler子线程里面进行操作。

4.Android目前提供两种http通信方式:在Android2.3版本之前是基于httpClient,Android2.3版本以后是基于HttpURLconnection().

  • HttpClient:有两个具体实现类DefaultHttpClient和AndroidHttpClient,它们拥有众多API,而且实现比较稳定,bug数量少,由于API众多,使得我们很难在破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度不积极。
  • HttpURLconnection:是HttpClient轻量型,是一种多用途的轻量级的Http客户端,使用它来进行http操作可以适用于大多数的应用程序,API少,但是容易扩展和升级。2.2之前存在一些令人讨厌的bug.在Android4.0以后,HttpURLConnection提供了压缩和缓存机制,可以有效地减少访问时的网络流量。但是没有提供处理session和cookies的功能。而httpclient会自动维护与服务器之间的session状态,也就是说程序第一次使用httpclient登录系统后,接下来使用httpclient即可访问被保存的页面了。
  • 第一种是Java的HttpURLConnection,默认带gzip压缩(对JSON字符串进行压缩)
    第二种Apache的HttpClient,默认不带gzip压缩
    两种方式请求connection都是keep alive,默认User-Agent不同。

5.MVC模式

MVC(model_view_controller)即是:”模型_视图_控制器“MVC应用程序总是由这三个部分组成。Event事件导致controller改变Model或者View,或者同时改变两者,只要controller改变了Models的数据或者属性,所有依赖的View都会自动更新,类似的,只要controller改变了view,view会从潜在的model中获取数据来刷新自己。

6.Android开发中常用的布局和组件有哪些?

布局:

  • LinearLayout(线性布局)
  • RelativeLayout(相对布局)
  • TableLayout(表格布局)
  • GridLayout(网络布局)
  • AbsoluteLayout(绝对布局)
  • FrameLayout(框架布局):ViewAnimator,DatePicker和TimePicker(时间,日期选择器)

组件:

  • TextView:Button(Check Box(复选按钮),RadioButton(单选按钮),ToggleButton(状态开关),switch(开关)),Edit Text,Checked TextView,Digital Clock(里面显示当前时间),Chronometer(计时器)。
  • ImageView:ImageButton(zoomButton(指定放到缩小,zoomControls组件可以放大或者缩小)),QuickContactBadge(显示联系到特定联系人的图片(E_mail,手机号))
  • AdapterView:
  1. AbsListView(GridView,ListView(ExpandableListView(可扩展组件,适合于作组类,QQ组)),
  2. AbsSpinner(Spinner,Gallery(已经被弃用,用HorizontalScrollView,ViewPager替代))),
  3. AdapterViewAnimator(AdapterViewFlipper(每次显示一个ViewItem,通过ShowPrevious()和Shownext()来显示下一个组件,StartFilpping()来控制自动播放,stopFilpping()停止播放),StackView(“堆叠”方式))。
  • ProgressBar:AbSeekBar(SeekBar(进度条,水平和环形),RatingBar(等级进度条))。(附:可以用Handler来更新进度条)。
  • ViewAnimator:ViewSwitcher(imageSwicher,TextSwicher)。
  • Toast显示提示框:持续时间提供了Toast.LENGTH_SHORT,Toast.LENGTH_LONG两个值。
  • CalendarView,DatePicker和TimePicker(日期和时间选择器),NumberPicker(数值选择器(键盘输入,或者拖动来选择数值)),SearchView(搜索框),TabHost(被fragment取代),ScrollView(算不上真真的容器,最多只能包含一个组件),Notification显示手机状态栏通知,AlertDialog对话框。

7.GridView和ListView区别:ListView是GridView的特例只有一列。

8.Spinner和Gallery区别:前者为垂直列表框,后者为水平列表框。两者同时支持entries="@arrary/books"属性(使用数字设置下拉表框列表项)就不用Adapter了。

9.Android开发共享数据:文件和数据库,intent传递,contentprovider,全局变量,线程共享,sharepreference.

Android开发的基础知识点的更多相关文章

  1. Android 开发必备的知识点——JVM基础【转】

    image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...

  2. android开发学习---基础知识学习、如何导入已有项目和开发一个电话拨号器

    一.基础知识点学习  1.Android体系结构 如图所示,android 架构分为三层: (1)最底层是linux内核,主要是各种硬件的驱动,如相机驱动(Camera Driver),闪存驱动(Fl ...

  3. Android开发学习——基础学习

    在微信公众号上,发现一个自学android的一个文章,觉得不错.对其进行小小总结,整理给大家. 1. 基础UI学习 Button/TextView/EditText/CheckBox/ImageVie ...

  4. Android开发 Unity3D基础 Android Development

    开发环境 Window 7 Unity3D 3.3.0 MB525 defy Android 2.1-update1 本次学习: 1.认识Unity 2.Unity3D环境搭建与Android软件生成 ...

  5. 关于SQLite在Android开发中的知识点总结

    一.存放位置 1.内部存储-放在 data/data 底下, 也就是内部存储, 里面的文件以及文件夹是私有的, 其他 app 不能访问, 也随着 app 卸载而删除; 2.放在 sd 卡里面, 如果设 ...

  6. Android开发——绘图基础

    前言: Android中绘图基本三个类,分别是Paint(画笔),Path(路径),Canvas(画布),这三个也是自定义View经常会使用到的类 个人理解,Canvas画布这个翻译其实不太好,这个类 ...

  7. react native android 开发,基础配置笔记。

    一.React-native-device-info https://github.com/rebeccahughes/react-native-device-info 二.修改App名称 三.定位权 ...

  8. Android开发Java基础之Java语言基础(1)

    Java中的基本数据类型 整数类型 整数类型用来存储整数数值,既没有小数部分的数值.可以是正数,也可以是负数.整数类型在Java程序中有三种表现形式,分别是十进制,八进制,十六进制. 整型数据根据它所 ...

  9. 【Mood-12】Android开发相关书籍推荐

    新年伊始,找到Android进阶干货若干,2015拜读. 1.Android应用UI设计模式 目前,谷歌Android操作系统在移动市场中风头正劲,并且未来发展势不可挡.<Android应用UI ...

随机推荐

  1. Django学习笔记之Django视图View

    一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  2. Buildbot初探

    什么是Buildbot Buildbot是一个持续集成和自动化测试框架,我在毕业刚进VMware不久的一个和以色列人合作的项目中接触到Buildbot,当时我真的恨死它了...经常随意的提交了一些代码 ...

  3. java拷贝指定文件夹下的指定文件类型

    例如:把C:\Windows\SysWOW64下的所有dll文件拷贝到C:\Users\Administrator\Desktop\64dll这个目录 package com.xiaostudy.co ...

  4. Android -- SQLite 数据库创建,增删改查,事务处理

    1. 概述 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类 ...

  5. Ajax -- 原理及简单示例

    1. 什么是Ajax •Ajax被认为是(AsynchronousJavaScript and XML的缩写).现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax. 2. Ajax ...

  6. TCP异步IO_服务端_测试

    1.测试代码来自于 JDK7 AIO初体验 http://www.iteye.com/topic/1113611 1.1. package aio; import java.net.InetSocke ...

  7. GO学习笔记:函数defer

    Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源的操作时,遇 ...

  8. Eclipse工具栏上android的机器人小图标不见了

    可以通过「Window」⇒「Customize Perspective」⇒「Tool Bar Visibility」Tab画面上选择Android SDK and AVD Manager来显示

  9. ionic2——开发利器之Visual Studio Code 常用插件整理

    1.VsCode官方插件地址: http://code.visualstudio.com/docs 2.使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件 添加方法使 ...

  10. 017——VUE中v-fo指令的使用方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...