一、Android简介:

       由Andy Rubin开发,

  常用手机版本:谷哥:Nexus、华为:EMUI、魅族:Flyme

  Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的、应用通过权限控制很容易获取用户敏感信息。

二、Android系统框架:

 

       Android虚拟机dalvik与JVM区别(版权问题开发的dalvik):

Dalvik

Jvm

识别的是dex文件

识别的是class jar包(多个class的压缩包)

架构是基于寄存器

架构是基于栈

       Android ART模式(自4.4后出现):安装应用时把dex文件转换成机器码存在本地

三、开发环境:

       SDK文件目录

 

进入adb shell

 

Android Studio两种apk模式:

  • 1。Debug(默认有签名:debug.keystore)
  • 2。Release

四、SDK基础:

       1。视图控件(View):使用xml布局文件定义界面。绝大部分UI组件都放在android.widget包及其子包。

资源文件概览      

  2。布局介绍:

         1。线形布局LinearLayout

         2。相对布局RelativeLayout

         3。帧布局FrameLayout

         4。表格布局TableLayout

         5。网格布局GridLayout

         6。绝对布局AbsoluteLayout

  3。Textview和EditText

         TextView:继承于View是EditText和Button两个组件父类,只能显示文本信息

         EditText:允许用户文本编辑

  4。ImageView:显示图片

  5。Button和ImageButton

Button

ImageButton

按钮点击事件

有text属性

有src属性

可以设置文本

可以设置图片

  6。RadioButton单选框

     

    

  7。Spinner

    1。静态方式

                在values文件夹下生成数组数据

      

      在layout文件下的main.xml文件中

    效果

    2。动态方式,使用配适器添加数据

  8。AutoCompleteTextView

  9。Toast:短暂消息提示,不打断用户操作

         特点:无法被操作,显示后会自动消失,无需用户操作

                  大部分只显示文本字符串,只用两种属性

                       Toast.LENGTH_SHORT  2秒

                       Toast.LENGTH_LONG   3.5秒

         自定义Toast步骤:

                1。通过构造函数建立Toast实例

                2。调用setView,指示Toast显示内容

                3。调用setGravity,设定显示位置

                4。调用setDuration,设定显示时间

                5。调用show()显示

 

  10。Dialog对话框:

                     a.提供原界面没有空间呈现的内容     eg:音量设置

                     b.提示进一步确认信息

              常用对话框:

      ProgressDialog:进度对话框    

                     DatePickerDialog:日期选择对话框        

                     TimePickerDialog:时间选择对话框

      AlertDialog:风格与界面一致,三部分组成:标题、内容、按钮。使用Builder类构建

             三个组成部分:

            1。标题(setTitle()方法)

            2。内容(setMessage()方法)

            3。按钮(setButton()方法

                setPositiveButton()方法

                setNegativeButton()方法等)

           使用Builder类构建最简单,提供了一系列的方法配置AlertDialog

    

    在调用builder调用show()方法前,仍然可对Dialog做其他设置

        1。Dialog主体是List回调接口

     

                       2。Dialog主体是CheckBox回调接口

                    

                       3。Dialog主体是RadioButton回调接口

       

                       4。完全自定义Dialog内容

       

 

  11。复杂控件:

              ListView:最广泛的数据显示控件

                     常用属性

属性名

说明

divider

设置分割线的颜色

dividerHeight

设置分割线的高度

Scrollbars

设置滚动条的隐藏或显示

Fadescrollbars

设置滚动条的自动隐藏或显示

Entries

引用一个将使用ListView的数组。

若静态数组,使用此属性比在程序中写入更为简单

              ListView的使用:

               第一种:一般

                     1。在布局文件中编写代码(添加标签) 

                     2。Activity中       

                            a。获取ListView对象

                            b。准备数据源

                            c。配置配适器

                            d。将配适器关联到ListView中

               第二种:使用ArrayAdapter实现文字列表

                     1。布局文件编写代码

                     2。Xml文件中添加ListView标签

                     3。Activity中编写代码

                            a。获取ListView对象

                            b。准备数据源(Array数组)

                            c。配置配适器

                            d。将配适器关联到ListView中

                    

    配适器(Adapter):一个接口,派生了ListAdapter(提供列表)和SpinnerAdapter(提供列表选项)两个字接口

    配适器是数据和视图的桥梁,负责把数据所提供的内容显示到视图所定义的外观。

    1。配适器种类

属性名

说明

ArrayAdapter

适用于简单的文字列表

SimpleAdapter

适用于简单的图文混搭列表

SimpleCursorAdapter

适用于数据源是数据库的列表

自定义Adapter(继承BaseAdapter)

适用于绝大多数情况

 

         12。Activity之间的数据传递:意图

        意图Intent:Android三个重要组件Activity、Service、Broadcast Receiver(广播),都依靠Intent启动和数据交换。

      Intent分两类:

        1。显示意图:明确指出组件名称的Intent,可以调用setComponent或setClass指定

      源码:

                     

      Eg:启动第二个页面

      

        2。隐式意图:没有明确的组件名称,必须包含足够的属性信息,需要在清单文件activity中添加<intent-filter>标签并且在内添加Action,Data,Category。由Android系统帮助寻找Intent请求相匹配的组件

      清单文件中,在<application     </activity>之间,配置隐式Intent

        

Action字符串

描述

ACTION_MAIN

主程序入口,不会接收数据,结束后不返回数据

ACTION_EDIT

打开编辑Data里指定数据相对应的应用程序

ACTION_CALL

拨打Data里面指定的电话号码

ACTION_DIAL

启动系统拨号程序或其他拨号程序,显示Data里号码

              Data数据属性:描述Intent要操作的数据URI和数据类型

              Extra额外属性:使用Intent连接不同的组件时,附加额外信息,传递数据

              Category类别:对被请求组件的额外描述信息。

                     Intent类中的常量字符串

Category字符串

描述

CATEGORY_BROWSABLE

目标Activity能够在浏览器中点击链接激活

CATEGORY_HOME

手机开机后显示Activity,或按下Home键显示界面

CATEGORY_LAUNCHER

应用程序最先被执行的Activity

CATEGORY_PREFERENCE

偏好设置的Activity

        

        注意:一条<intent-filter>元素至少包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配

 

      Intent的数据传输:

      Activity之间的数据传递步骤

                  显示:

                         1。创建新的Activity

                         2。启动Activity

                         3。启动之前传递数据,启动时接收数据

                         4。将数据封装到Intent对象中传递

                         5。将数据封装到Bundle对象中传递

                            隐式:通过设置<action>标签

                                   1。匹配<intent-filter>中的Action

                                   2。接收隐式intent必须要在intent过滤器中包含  “android.intent.category.DEFAULT"

                                   3。用Uri来做data

                                   4。附加信息extras

                Intent数据返回

                       onSaveInstanceState()确保活动被销毁前调用,保存关键数据

                            1。以startActivityForResult()方式启动

                            2。在新界面使用setResult()返回

                            3。上一个活动中重写onActivityResult()

    

    Activity四大组件:

      Activity生命周期:

        1。返回栈:Android活动可以叠加,新的Activity可以覆盖原活动,返回销毁最上面的Activity,下面的Activity重新活动。

          

      Activity四种活动状态:

             运行状态:Activity在返回栈顶,系统不会回收活动

             暂停状态:Activity不在栈顶,但可见

             停止状态:Activity不在栈顶,不可见,系统会保存相关状态,但需要内存时,会进行回收

             销毁状态:Activity离开返回栈,系统优先回收

      Activity生命周期:

           

        Activity四种启动模式:android:launchMode=" "

           

          1。standared模式(默认):

                           每当启动一个新的活动,就在返回栈中入栈,并处于栈顶,不检查栈顶。

                    2。singleTop模式(解决栈顶重复问题)

            启动前检测栈顶,如果存在该活动,直接使用,如果不为于栈顶,仍然创建新的活动对象

                    3。singleTask模式

                           启动前检测整个返回栈,存在直接使用并将该活动之上的所有活动出栈。

                    4。singleInstance模式(实现其他程序共享这个活动的实例)

                           创建一个新栈来管理活动

       Activity响应事件机制:每个View都有自己的回调方法,常用的回调方法:onKeyDown、onKeyUp、onTouchEvent、onTrackballEvent、onFocusChanged

                      1。基于回调机制

                      2。基于监听机制

 

     广播:

      广播接收者BroadcastReceiver:类似windows的消息钩子,全局监视器,实现组件间通信。

      全局广播:广播可以被任何应用程序收到

                       广播类型:

            有序广播(类似串联):通过sendOrderedBroadcast()发送广播,adortBroadcast()截断广播

                                无序广播(类似并联)标准广播:完全异步执行,通过sendBroadcast()发送

                本地广播:只能在本应用程序接收,只能代码注册不能静态注册

                        使用方式:

                                 LocalBroadcastManager管理广播

                                 LocalBroadcastManager.getInstance()获得实例

                                 xx.registerReceiver()注册广播

                                 xx.sendBroadcast()发送广播

                                xx.unregisterReceiver()取消注册 

 

                广播的注册

                         静态注册

       

                         动态注册

      

 

        服务:

              特点:1。后台运行

                       2。没有界面

                       3。无法自己启动    

                       4。单例模式

              生命周期

       一个service的onStartCommand可能重复调用多次

              两种启动方式:

                     1。startService:启动的服务所在的进程属于服务进程,Activity一旦启动服务,就与Activity无关

                     2。binService:启动的服务所在的进程不属于服务进程,Activity与服务建立连接,Activity退出服务也退出

 

       Android网络接口

              使用的网络协议:HTTP,HTTPS,TCP/IP,SOCKET

              网络接口:

                     Java.net

                     Org.apache接口

                     Android.net

              两种网络架构:

                     B/S模式:浏览器/服务端,应用层HTTP协议通讯,不需要特定客户端软件

                     C/S模式:客户端/服务器,任意网络协议,特定客户端

              服务端返回内容的方式:

                     HTML代码形式返回

                     XML字符串形式返回

                     Json对象方式返回

 

   Android多线程:主线程不能进行耗时操作否则会报异常。anr 阻塞异常

      耗时操作使用子线程操作。只有主线程才可以更新UI。

      runOnUiThread()方法在主线程或子线程都可以更新UI

    handler原理:

    

      handler:用来发送消息和处理消息

           Looper:取消息队列取消息,主线程一创建,Looper就有了

 

    使用步骤:

                1。主线程定义Handler

     

 

                2。使用handler重写handler里面的bandlemessage()方法

     

                3。在主线程创建hanndler子线程发消息

     

                4。handlermessage方法里更新UI

     

 

posted on 2019-06-02 11:27  黑箱  阅读(623)  评论(0编辑  收藏  举报