Android系统应用开发简介.ppt

上传人:max****ui 文档编号:3385938 上传时间:2019-12-13 格式:PPT 页数:48 大小:1.73MB
返回 下载 相关 举报
Android系统应用开发简介.ppt_第1页
第1页 / 共48页
Android系统应用开发简介.ppt_第2页
第2页 / 共48页
Android系统应用开发简介.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
Android应用开发,2010年8月13日,Android平台架构,Android环境配置和开发,Android应用程序构成,如何开发一个例子,目录,Android平台架构,JNI,JAVA,C/汇编,简介,Linux核心:Android依赖Linux2.6来提供核心的服务,例如存储管理、进程(Process)管理等AndroidRuntime:Java语言层级的VirtualMachineLibraries:Android里已经提供的C/C+组件。例如,SQLite、OpenGL3D等。应用框架(ApplicationFramework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用应用程序(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。,用汉堡比喻Android平台架构,Android环境配置和开发,Android平台架构,Android应用程序构成,如何开发一个例子,目录,如何安装AndroidSDK和Eclipse插件,所需开发环境:JDK5或JDK6(仅有JRE不够)Eclipse3.5(galileo)下载ADT的Eclipse插件,开发第一个Android应用,打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择AndroidProject,如下图:,开发第一个Android应用,开发第一个Android应用,点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用:点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:,开发第一个Android应用,在打开的虚拟设备管理器中创建一个虚拟手机:,开发第一个Android应用,在项目上右键点击runasAndroidapplication,如下图:,Android应用程序架构,src/java原代码存放目录gen/自动生成目录gen目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。res/资源(Resource)目录在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。AndroidManifest.xml功能清单文件这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。default.properties项目环境信息,一般是不需要修改此文件,目录,Android环境配置和开发,Android平台架构,Android应用程序构成,如何开发一个例子,Android应用程序构成,Activity,Service,BroadcastReceiver,ContentProvider,Intent,Activity,Avisualuserinterface通过view管理UI每一个有用户界面的应用至少包含一个activity一个应用可以有多个activity,其中一个作为mainactivity用于启动显示Activity通过startActivity或startActivityForResult启动另外的activity,Activity生命周期,Activity通过onCreate被创建当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止,Intent,类似于消息、事件通知Intent构成:action、category、dataActivity、Service、broadcastreceiver之间的桥梁,Intent,activity,service,Broadcastreceiver,Intent,两类intent:显式:指定具体的目标组件处理startActivity(newIntent(ActivityLifecycle.this,AnotherActivity.class);隐式:由系统接受并决定如何处理startActivity(newIntent(Intent.ACTION_DIAL);在AndroidManifest.xml中定义activity、service、broadcastreceiver接受的intent,Intent,Intentfilter:action、category、data,framework,ComponentnameActionDataCategory,intent,component,activity,service,Broadcastreceiver,实例,action-DIALdata-tel:01038639592,action-VIEWdata-,Service,没有UI,启动之后一直运行于后台例子:音乐播放器与应用程序的其他模块(例如activity)一同运行于主线程中通过startService或bindService创建Service通过stopService或stopSelf终止Service一般的,在activity中启动和终止service,Service生命周期,Context.stopService()Serivce.stopSelf(),Context.startService(),Context.bindService(),服务-Service,Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:第一步:继承Service类publicclassSMSServiceextendsService,服务-Service,第二步:在AndroidManifest.xml文件中的节点里对服务进行配置:服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。,服务-Service,如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-onDestroy()方法。,服务-Service,服务常用生命周期回调方法如下:onCreate()该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。onDestroy()该方法在服务被终止时调用。与采用Context.startService()方法启动服务有关的生命周期方法onStart()只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart()方法会被多次调用。与采用Context.bindService()方法启动服务有关的生命周期方法onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。,采用startService()启动服务,采用Context.startService()方法启动服务的代码如下:publicclassHelloActivityextendsActivityOverridepublicvoidonCreate(BundlesavedInstanceState).Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)Intentintent=newIntent(HelloActivity.this,SMSService.class);startService(intent););,采用bindService()启动服务,采用Context.startService()方法启动服务的代码如下:publicclassHelloActivityextendsActivityServiceConnectionconn=newServiceConnection()publicvoidonServiceConnected(ComponentNamename,IBinderservice)publicvoidonServiceDisconnected(ComponentNamename);OverridepublicvoidonCreate(BundlesavedInstanceState)Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)Intentintent=newIntent(HelloActivity.this,SMSService.class);bindService(intent,conn,Context.BIND_AUTO_CREATE);/unbindService(conn);/解除绑定);,何为Contentprovider,什么是Contentprovider?ContentProvider是Android应用程序的四大组成部分之一是android中的跨应用访问数据机制为何需要contentprovider?Android中每一个app的资源是私有的app通过contentprovider和其他app共享私有数据,如何使用contentprovider,通过contentresolver访问Context.getContentResolver(),app,ContentResolver,ContentProviderA,ContentProviderB,ContentResolver,ContentResolver,app,app,如何使用contentprovider,URI定位资源content:/contacts/peoplecontent:/call_log类似关系数据库的访问方式以二维数据表的格式暴露数据,缺省都包含_id字段,delete(Uriurl,Stringwhere,StringselectionArgs)insert(Uriurl,ContentValuesvalues)query(Uriuri,Stringprojection,Stringselection,StringselectionArgs,StringsortOrder)update(Uriuri,ContentValuesvalues,Stringwhere,StringselectionArgs),定义自己的contentprovider,Android的存储,一般的,应用程序的数据(包括文件)都是私有的四种持久存储方式Preferences类似properties,xml文件FilesDatabaseSQLiteNetwork,Broadcastreceiver,接收和处理android的广播消息Android的广播机制系统事件例如变换时区、电量低等应用程序发出广播消息:sendBroadCast广播消息:intent,android,app,Broadcastreceiver,Sendbroadcast,创建BroadcastReceiver,实现一个BroadcastReceiverpublicclassMyAndroidReceiverextendsBroadcastReceiveroverrideonReceive(Contextcontext,IntentsIntents)注册BroadcastReceiver在AndroidManifest.xml文件当中进行注册在代码当中直接进行注册,IntentsFilterfilter=newIntentsFilter(NEW_BROADCAST);MyAndroidReceiverMyAndroidReceiver=newMyAndroidReceiver();registerReceiver(MyAndroidReceiver,filter);,Broadcastreceiver生命周期,Broadcastreceiver对象在onReceive返回后被销毁,onReceive中不适合处理异步过程。例如弹出对话框与用户交互,可使用消息栏替代。,Android权限控制,在AndroidManifest.xml中描述一个app的权限例如:,权限举例(参考android.Manifest.permission),目录,Android环境配置和开发,Android平台架构,Android应用程序构成,如何开发一个例子,从Internet获取数据,利用HttpURLConnection对象,我们可以从网络中获取网页数据.URLurl=newURL();HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(6*1000);/设置连接超时if(conn.getResponseCode()!=200)thrownewRuntimeException(请求url失败);InputStreamis=conn.getInputStream();/得到网络返回的输入流Stringresult=readData(is,GBK);conn.disconnect();System.out.println(result);/第一个参数为输入流,第二个参数为字符集编码publicstaticStringreadData(InputStreaminSream,StringcharsetName)throwsExceptionByteArrayOutputStreamoutStream=newByteArrayOutputStream();bytebuffer=newbyte1024;intlen=-1;while(len=inSream.read(buffer)!=-1)outStream.write(buffer,0,len);bytedata=outStream.toByteArray();outStream.close();inSream.close();returnnewString(data,charsetName);,从Internet获取数据,利用HttpURLConnection对象,我们可以从网络中获取文件数据.URLurl=newURL(FileOutputStreamoutStream=newFileOutputStream(file);bytebuffer=newbyte1024;intlen=-1;while(len=inSream.read(buffer)!=-1)outStream.write(buffer,0,len);outStream.close();inSream.close();,向Internet发送请求参数,利用HttpURLConnection对象,我们可以向网络发送请求参数.StringrequestUrl=http:/localhost:8080/itcast/contanctmanage.do;MaprequestParams=newHashMap();requestParams.put(age,12);requestParams.put(name,中国);StringBuilderparams=newStringBuilder();for(Map.Entryentry:requestParams.entrySet()params.append(entry.getKey();params.append(=);params.append(URLEncoder.encode(entry.getValue(),UTF-8);params.append(,向Internet发送请求参数,conn.setDoOutput(true);/发送POST请求必须设置允许输出conn.setUseCaches(false);/不使用Cacheconn.setRequestMethod(POST);conn.setRequestProperty(Connection,Keep-Alive);/维持长连接conn.setRequestProperty(Charset,UTF-8);conn.setRequestProperty(Content-Length,String.valueOf(data.length);conn.setRequestProperty(Content-Type,application/x-www-form-urlencoded);DataOutputStreamoutStream=newDataOutputStream(conn.getOutputStream();outStream.write(data);outStream.flush();if(conn.getResponseCode()=200)Stringresult=readAsString(conn.getInputStream(),UTF-8);outStream.close();System.out.println(result);,=向Internet发送xml数据,利用HttpURLConnection对象,我们可以向网络发送xml数据.StringBuilderxml=newStringBuilder();xml.append();xml.append();xml.append(中国);xml.append();bytexmlbyte=xml.toString().getBytes(UTF-8);URLurl=newURL(http:/localhost:8080/itcast/contanctmanage.do?method=readxml);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(6*1000);conn.setDoOutput(true);/允许输出conn.setUseCaches(false);/不使用Cacheconn.setRequestMethod(POST);conn.setRequestProperty(Connection,Keep-Alive);/维持长连接conn.setRequestProperty(Charset,UTF-8);conn.setRequestProperty(Content-Length,String.valueOf(xmlbyte.length);conn.setRequestProperty(Content-Type,text/xml;charset=UTF-8);DataOutputStreamoutStream=newDataOutputStream(conn.getOutputStream();outStream.write(xmlbyte);/发送xml数据outStream.flush();if(conn.getResponseCode()!=200)thrownewRuntimeException(请求url失败);InputStreamis=conn.getInputStream();/获取返回数据Stringresult=readAsString(is,UTF-8);outStream.close();,HTTP多线程断点下载应用程序,多线程下载:,HTTP多线程断点下载应用程序,如何才能从文件的指定位置处开始下载文件?(比如从50MB开始)这一点我们可以通过HTTP请求信息头来设置,可以使用HTTP请求信息头的“Range”属性。例如:只要在请求头中加入以下代码就可以只请求部分数据:Content-Range:bytes20000-40000/47000,即从第20000字节请求到第40000个字节,(文件长度是47000字节),HTTP多线程断点下载应用程序,如何支持断点下载。就是将下载的进度保存到文件中,但在Android中却不能这么做。在Android平台中,我们需要向文件中写出下载的文件数据,我们通过数据库的方式保存下载进度,谢谢!,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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