Android入门基础培训课件

上传人:文**** 文档编号:240604986 上传时间:2024-04-24 格式:PPTX 页数:55 大小:1.77MB
返回 下载 相关 举报
Android入门基础培训课件_第1页
第1页 / 共55页
Android入门基础培训课件_第2页
第2页 / 共55页
Android入门基础培训课件_第3页
第3页 / 共55页
点击查看更多>>
资源描述
AndroidAndroid开发知识点开发知识点Android开发环境的搭建(androidstudio+gradle+jdk1.8)Android框架Android四大组件:Activity、Service、ContentProvider、BroadcastReceiverUI与基本布局数据存储:SharedPreferences、文件、SQLite数据库、网络Android网络通信 volley,xutils,fjFrameforandroid,hessian,okhttp等其它:NDK,adb、HierarchyView、DDMS、draw9patch一、Android 框架1.Aplications(应用用层)应用是用Java语言编写的云新在虚拟机上的程序。2.ApplicationFramework(应用框架用框架层)这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。ViewSystem:可以用来构建应用程序,它包括列表、网格、文本框、按钮以与 可嵌入的Web浏览器。ContentProviders:它可以让一个应用访问另一个应用的数据,或共享它们自己的数据。ResourceManager:提供非代码资源的访问,如本地字符串、图形和布局文件。NotificationManager:应用可以在状态栏中显示自定义的提示信息。ActivityManager:用来管理应用程序生命周期并提供常用的导航退回功能。WindowManager:管理所有的窗口程序。PackageManager:Android系统内的程序管理。3.Libraries、AndroidRuntime(系(系统运行运行库层)当使用Android应用框架时,Android系统会通过一些C/C+库赖支持我们使用的各个组件,使其能更好地为我们服务。Bionic系统C库:C语言标准库,系统最底层的的库,C库通过Linux系统来调用。多媒体库(MediaFramework):Android系统多媒体库,基于PackerVideoOpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以与图片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。SGL:2D图形引擎库。SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。OpenGLES1.0:3D效果的支持。SQLite:关系数据库。Webkit:Web浏览器引擎。FreeType:位图(bitmap)与矢量(vector)。在Android操作系统中,每个Java程序都运行在Dalvik虚拟机上,其只能执行.dex的可执行文件,当Java程序通过编译后,最后还需要通过SDK中的dx工具转为成.dex格式才能正常在虚拟机上执行,Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式dex(DalvikExceutable)的文件。Dalvik虚拟机有几个主要特征:专有的dex文件格式、dex的优化,dex文件的结构是紧凑的、基于寄存器、一个应用,一个虚拟机实例,一个进程。每一个Android应用度运行在一个Dalvik虚拟机实例中,每一个虚拟机实例都是一个独立的进程空间4.LinuxKernel(Linux内核内核层)显示驱动(DisplayDriver):基于Linux的帧缓冲(FrameBuffer)驱动。键盘驱动(KeyBoardDriver):作为输入设备的键盘驱动。Flash内存驱动(FlaseMemoryDriver):基于MTD的Flash驱动程序。照相机驱动(CameraDriver):常用的基于Linux的v412(VideoforLinux)的驱动。音频驱动(AudioDriver):常用的基于ALSA的高级Linux声音体系驱动。蓝牙驱动(BluetoothDriver):基于IEEE802.15.1标准的无线传输技术。WiFi驱动:基于IEEE802.11标准的驱动程序。BinderIPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。PowerManagement(电源管理):比如电池电量等。多媒体编程调用关系二、Android 四大组件1.ActivityActivity是Android程序的表示层,程序的每一个显示屏幕就是一个Activity。1、Running位于屏幕最前端时,此时处于可见状态,和用户可交互的状态。2、Paused当Acitivy被另一个透明的或者非全屏的Activity覆盖时的状态叫Paused状态,虽然可见但不可交互。3、Stop当Activity被另外一个Activity覆盖、界面不可见时处于Stop状态。4、KilledActivity被系统杀死或者跟本没启动时就是Killed状态。Android是通过一种Activity栈的方式来管理Activity的,一个Activity在栈中的位置决定它的状态。2.BroadcastReceive 你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。广播类型:1)普通广播,通过Context.sendBroadcast(IntentmyIntent)发送的2)有序广播,通过Context.sendOrderedBroadcast(intent,receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在-1000到 1000之间,值越大,发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的,再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数3)异步广播,通过Context.sendStickyBroadcast(IntentmyIntent)发送的,还有sendStickyOrderedBroadcast(intent,resultReceiver,scheduler,initialCode,initialData,initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要:权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉注意:发送广播时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用,后者只能被一个(Activity或service)调用。监听广播Intent步骤:1)写一个继承BroadCastReceiver的类,重写onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态,注意:为了保证用户交互过程的流畅,一些费时的操作要放到线程里,如类名SMSBroadcastReceiver2)注册该广播接收者,注册有两种方法程序动态注册和AndroidManifest文件中进行静态注册(可理解为系统中注册)如下:静态注册,注册的广播,下面的priority表示接收广播的级别2147483647为最高优先级3.ServiceService在后台运行,不与用户进行交互。在默认情况下,Service运行在应用程序进程的主线程中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务放在单独的线程中处理,避免阻塞用户界面.创建Service继承android.app.Service实现自己的服务必须在AndroidManifest.xml注册service启动servicestartService(i);停止servicestopService(i);startServiceservice没有运行,则先调用onCreate方法然后调用onStart方法service已经运行,则直接调用onStart方法stopService调用stopService停止Service调用onDestory最终销毁service绑定Service 调用Context.bindService(),客户端可以绑定到正在运行的Service上,如果此时Service没有运行,系统会调用onCreate()方法来创建Service,但是并不会调用onStart()方法。客户端成功绑定到Service之后,可以从onBind()方法中返回一个IBinder对象,并使用IBinder对象来调用Service的方法。一旦客户端与Service绑定,就意味着客户端和Service之间建立了一个连接,只要还有连接存在,那么系统会一直让Service运行下去。使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-onDestory();4.ContentProviderContentProvider是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取以与操作数据,实现数据共享方法。Android自身也提供了几个现成的ContentProvider:ContactsBrowserCallLogSettingsMediaStore使用方法通过ContentResolver来使用具体的某个ContentProvider。ContentResolvercr=getContentResolver();contentResolver提供的方法:query()insert()update()delete()ContentProvider-URI组成三、UI与基本布局1.View与与ViewGroupView是基类,ViewGroup是它的子类。View和和ViewGroup最重要的几个方法最重要的几个方法View和ViewGroup最重要的几个方法:onMeasure(intwidthMeasureSpec,intheightMeasureSpec):当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数widthMeasureSpec和heightMeasureSpec onDraw(Canvascanvas):View类中用于重绘的方法,这个方法是所有View、ViewGroup与其派生类都具有的方法,也是AndroidUI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。onLayout(booleanchanged,intleft,inttop,intright,intbottom):View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup与其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。dispatchDraw(Canvascanvas):ViewGroup类与其派生类具有的方法,这个方法主要用于控制子View的绘制分发,重载该方法可改变子View的绘制,进而实现一些复杂的视效,典型的例子可参见Launcher模块Workspace的dispatchDraw重载。drawChild(Canvascanvas,Viewchild,longdrawingTime):ViewGroup类与其派生类具有的方法,这个方法直接控制绘制某局具体的子view,重载该方法可控制具体某个具体子View。View布局布局View显示示View显示示过程程1)ActivityManagerService创建Activity线程,激活一个activity2)系统调用Instrumentation.newActivity创建一个activity3)Activity创建后,attach到一个新创建的phonewindow中。这样Activity获取 一个唯一的WindowManager服务的实例4)Activity创建过程中使用setcontentView设置用用户UI,这些VIEW被加入到PhoneWindow的ContentParent中。5)Activity线程继续执行,当执行到Activity.makeVisible是将根viewDecoView加入到WindowManger中,WindowManger实全会为每个DecoView创建对应的ViewRoot6)每个ViewRoot拥有一个Surface,每个Surface将会调用底层库创建图形绘制的内存空间。这个底层库就是SurfaceFlinger。SurfaceFlinger同时也负责将个View绘制的图形合到一块(按照Z轴)显示到用户屏幕。7)如果用户直接在Canvas上绘制,实际上它直接操作Surface。但对每个View的变更,它是要通知到ViewRoot,然后ViewRoot获取Canvas。如果绘制完成,surfaceFlinger得到通知,合并Surface成一个Surface到设备屏幕。从上面的图形输出过程分析,我们可以知道真正显示图形的实际上跟Activity没有关系,完全由WindowManager来决定。WindowManager是一个系统服务,因此可以直接调用这个服务来创建界面,并且更绝的是Dialog、Menu也是有WindowManager来管理的。另外一个我们也可以看到,最底层都是Surface来,因此,常见开发游戏的人都推荐你使用SurfaceView来创建界面。2.五大五大UI布局布局为了适应各式各样的界面风格,Android系统提供了5种布局:FrameLayout(框架布局)LinearLayout(线性布局)RelativeLayout(相对布局)TableLayout(表格布局)AbsoluteLayout(绝对布局)FrameLayout(框架布局框架布局)所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西 LinearLayout(线性性布局布局)每一个LinearLayout里面又可分为垂直布局(android:orientation=vertical)和水平布局(android:orientation=horizontal)。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。AbsoluteLayout(绝对布局布局)绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。这种布局比较少用。RelativeLayout(相相对布局布局)相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh TableLayout(表格布局表格布局)TableLayout顾名思义,此布局为表格布局,适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。TableRow是LinearLayout的子类,它的android:orientation属性值恒为horizontal,并且它的android:layout_width和android:layout_height属性值恒为MATCH_PARENT和WRAP_CONTENT。所以它的子元素都是横向排列,并且宽高一致的。这样的设计使得每个TableRow里的子元素都相当于表格中的单元格一样。在TableRow中,单元格可以为空,但是不能跨列。下面示例演示了一个TableLayout的布局结构,其中第二行只有两个单元格,而其余行都是三个单元格。四、数据存储数据存数据存储方式方式SharedPreferences文件SQLite数据库网络1.SharedPreferencesSharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,对于常规的轻量级而言比SQLite要好不少。xml处理时Dalvik会通过自带底层的本地XMLParser解析,比如XMLpull方式,这样对于内存资源占用比较好。它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:一、根据Context获取SharedPreferences对象 二、利用edit()方法获取Editor对象。三、通过Editor对象存储key-value键值对数据。四、通过commit()方法提交数据。SharedPreferences示例示例publicclassMainActivityextendsActivityOverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);SharedPreferencessp=getSharedPreferences(SP,MODE_PRIVATE);/存入数据Editoreditor=sp.edit();editor.putString(STRING_KEY,string);editor.putInt(INT_KEY,0);editor.putBoolean(BOOLEAN_KEY,true);mit();/返回STRING_KEY的值Log.d(SP,sp.getString(STRING_KEY,none);/如果NOT_EXIST不存在,则返回值为noneLog.d(SP,sp.getString(NOT_EXIST,none);这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。2.文件存文件存储关于文件存储,Activity提供了open()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。文件可用来存放大量数据,如文本、图片、音频等。默认位置:/data/data/files/*.*。示例publicvoidsave()tryoutStream=this.open(a.txt,Context.MODE_WORLD_READABLE);outStream.write(text.getText().toString().getBytes();outStream.close();Toast.makeText(MyActivity.this,Saved,Toast.LENGTH_LONG).show();catch(e)return;catch(IOExceptione)return;3.SQLite数据数据库存存储SQLite是轻量级嵌入式数据库引擎,它支持 SQL语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla,PHP,Python)都使用了 SQLite.SQLite由以下几个组件组成:SQL编译器、内核、后端以与附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite的内核变得更加方便。Android集成了 SQLite数据库 Android在运行时(run-time)集成了 SQLite,所以每个 Android应用程序都可以使用 SQLite数据库。数据库存储在/data/datat/databases/下。Android提供了 SQLiteOpenHelper帮助你创建一个数据库,你只要继承 SQLiteOpenHelper类,就可以轻松的创建数据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper的子类,至少需要实现三个方法:1.构造函数,调用父类 SQLiteOpenHelper的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。2.onCreate()方法,它需要一个 SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。3.onUpgrage()方法,它需要三个参数,一个 SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。SQLite数据数据库示例示例/通过getReadableDatabase()和getWritableDatabase()可以获得数据库对象。/提供onCreate()-创建数据库时,onUpgrade()-升级数据库时,两个回调函数。publicclassDatabaseHelperextendsSQLiteOpenHelper/按要求必须要有构造函数 publicDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion)super(context,name,factory,version);/当第一次得到SQLiteDatabase对象时,调用该方法Overridepublic void onCreate(SQLiteDatabase db)Stringsql=createtableMSG(idint,bodyvarchar(100);db.execSQL(sql);System.out.println(创建了一个数据库!);/当更新数据库时执行该方法Overridepublic void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)System.out.println(更新了数据库!);/还可以写其他的操作SQLite操作操作(增、增、删、查、改、改)getReadableDatabase()得到可读的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。getWritableDatabase()得到可写的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。SQLiteDatabase类类 提供了对数据库的一些基本操作:insert()、delete()、query()、update()/生成ContentValues对象,key:列名,value:想插入的值ContentValuesvalues=newContentValues();values.put(id,1);values.put(body,hello);DatabaseHelperdbhelper=newDatabaseHelper(SqliteActivity.this,text_msg,null,2);/得到可写的SQLiteDatabase对象SQLiteDatabasedb=dbhelper.getWritableDatabase();/调用insert方法,将数据插入数据库/参数1:表名/参数2:如果你想插入空值,那么你必须指定它的所在的列db.insert(MSG,null,values);System.out.println(插入了:1,hello);插入数据插入数据SQLite操作操作(增、增、删、查、改、改)删除数据删除数据DatabaseHelperdbhelper=newDatabaseHelper(SqliteActivity.this,text_msg,null,2);/得到可写的SQLiteDatabase对象SQLiteDatabasedb=dbhelper.getWritableDatabase();/调用delete方法,删除数据db.delete(MSG,id=?,newString1);System.out.println(删除了:id=1);SQLite操作操作(增、增、删、查、改、改)查询数据查询数据DatabaseHelperdbhelper=newDatabaseHelper(SqliteActivity.this,text_msg,null,2);/得到可读的SQLiteDatabase对象SQLiteDatabasedb=dbhelper.getReadableDatabase();/参数1:表名/参数2:要想显示的列/参数3:where子句/参数4:where子句对应的条件值/参数5:分组方式/参数6:having条件/参数7:排序方式Cursorcursor=db.query(MSG,newStringid,body,id=?,newString1,null,null,null);System.out.println(查到的数据为:);while(cursor.moveToNext()intid=cursor.getInt(cursor.getColumnIndex(id);Stringname=cursor.getString(cursor.getColumnIndex(body);System.out.println(-+id+:+name);SQLite操作操作(增、增、删、查、改、改)修改数据修改数据ContentValuesvalues=newContentValues();values.put(body,mydear!);DatabaseHelperdbhelper=newDatabaseHelper(SqliteActivity.this,text_msg,null,2);/得到可写的SQLiteDatabase对象SQLiteDatabasedb=dbhelper.getWritableDatabase();/调用insert方法,将数据插入数据库/参数3:where子句?是占位符号,对应后面的1,这和web开发时的语法是一样的db.update(MSG,values,id=?,newString1);System.out.println(更新了:hello-mydear!);SQLite数据数据库查看看1.通过Adb命令,进入数据库所在目录,用sqlite3命令查看2.通过GUI工具,如SQLiteManager五、工具与其它NDK,adb、HierarchyView、DDMS、draw9patch1.NDK:NativeDevelopmentKit(原生代码开发包)。NDK是一系列工具的集合,帮助开发者快速开发C(或C+)的动态库,并能自动将so和java应用一起打包成apk2.Adb:AndroidDebugBridge(调试桥)命令工具,android中最常用的命令工具。常用命令安装应用手机 adbinstallapp.apk 卸载应用:AdbshellCddata/appRmapp.apk 进入设备或模拟器的shellAdbshell 通过以上命令,可以进入设备或模拟器的shell环境中,在这个shell中,你可以执行 各种Linux的命令,另外如果只想执行一条shell命令,可以采用以下方式:Adbshellcommand如:Adbshellemesg会打印出内核的调试信息发布端口可以设置任意的端口号,作为主机箱模拟器或设备的请求端口。如:NDK,adb、HierarchyView、DDMS、draw9patchAdbforwardtcp:5555tcp:8000复制文件复制一个文件或目录到设备或模拟器上;Adbpush如:Adbpushtest.txt/tmp/test.txtAdbpull如:Adbpull/Android/lib/libwebcore.os搜索/等待模拟器、设备实例取得当前运行的模拟器、设备的实例列表与每个实例的状态或等待正在运行的设备AdbdevicesAdbwait-for-device查看debug报告 Adbbugreport无线通信日志非常多,在运行时没必要记录,可以通过命令设置记录AdbshellLogcat-bradio获取设备ID和序列号Adbget-productAdbget-serialno访问数据库SQLite3AdbshellSqlite3NDK,adb、HierarchyView、DDMS、draw9patch3.HierarchyView:层级观察器 主要功能有两个:1)从可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布 局设计;2)结合debug帮助观察特定的UI对象进行invalidate和requestLayout操作的过程。使用方法,手机插上电脑或者打开模拟器,打开hierarchyviewer.bat或者Eclipse中hierarchyviewer工具。打开后界面NDK,adb、HierarchyView、DDMS、draw9patchNDK,adb、HierarchyView、DDMS、draw9patch4.DDMS:DalvikDebugMonitorService,是 Android开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以与堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。Eclipse安装ADT后可打开DDMS窗口。NDK,adb、HierarchyView、DDMS、draw9patch5.draw9patch:九宫格绘画工具,可以让你很容易的通过一个所见即所得的编辑器来 创建一个九宫格NinePatch图,主要用于处理.9格式的图片。“*.9.png”这是Androidos里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”.9“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。该工具在AndroidSDK路径下 X:androidsdktools名为draw9patch.batNDK,adb、HierarchyView、DDMS、draw9patch谢谢!2016.04.22
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!