




已阅读5页,还剩90页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android:Activity,武汉科技大学计算机学院2020年4月,嵌入式系统开发与设计,Activity简介,.,3,Android核心组件:Activity,Activity活动Andorid组件中最基本也是最为常见用的组件在Android应用中,一个Activiy通常就是一个单独的屏幕每个Activity都被实现为一个从活动积累继承来的独立的类活动类显示的用户接口由视图控件组成,并对事件做出响应Activity是Android应用程序的表示层使用View来构成显示信息和响应用户动作的UI可以看做是开发环境中的Form应用程序越复杂,需要的屏幕可能越多,Activity的创建与使用,.,5,Activity的创建和使用,创建Activity在Activity类的基础上进行扩展在Activity中定义UI并实现其功能基本Activity类提供了封装了窗口显示处理功能的空白屏幕交互和显示还需要进行设计Activity的注册应用程序中的Activity需要在AndroidManifest.xml中进行注册没有对应标签的Activity不能被启动,.,6,Activity的创建和使用(2),在android.app.Activity类中,Android定义了一系列方法在应用程序中通过对这些方法的复写来完成对Activity的创建和使用publicclassOurActivityextendsActivityprotectedvoidonCreate(BundlesavedInstanceState);protectedvoidonStart();protectedvoidonReStart();protectedvoidonResume();protectedvoidonPause();protectedvoidonStop();protectedvoidonDestroy();,.,7,Activity的创建和使用(3),protectedvoidonCreate(BundlesavedInstanceState)一个Activity的实例被启动时调用的第一个方法一般都会覆盖该方法作为应用程序的一个入口点完成一些初始化数据、设置用户界面等工作大多数情况下,在该方法中从xml中加载设计好的用户界面。例如setContentView(R.layout.main);也可从savedInstanceState中读取保存到存储设备中的数据需要判断savedInstanceState是否为null,因为Activity第一次启动时并没有数据被存贮在设备中if(savedInstanceState!=null)savedInstanceState.get(Key);,.,8,Activity的创建和使用(4),protectedvoidonStart()在onCreate()方法之后被调用,或者在Activity从Stop状态转换为Active状态时被调用ProtectedvoidonReStart()在Activity被停止后调用protectedvoidonResume()在Activity从Pause状态转换到Active状态时被调用,.,9,Activity的创建和使用(5),protectedvoidonPause()在Activity从Active状态转换到Pause状态时被调用必要时也需要保存状态和数据protectedvoidonStop()在Activity从Active状态转换到Stop状态时被调用一般在这里保存Activity的状态信息protectedvoidonDestroy()在Activity被结束时调用,它是被结束时调用的最后一个方法一般完成释放资源,清理内存等工作,.,10,HelloWorld!,Java文件-应用程序源文件android本身相当一部分都是用java编写而成android的应用使用java来开发Class文件-Java编译后的目标文件Google使用Dalvik来运行应用程序Android的class文件是编译过程中的中间目标文件,需要链接成dex文件才能在Dalvik上运行,.,11,HelloWorld!(2),Dex文件-Android平台上的可执行文件Android虚拟机Dalvik支持的字节码文件格式Apk文件-Android上的安装文件Apk是Android安装包的扩展名,一个Android安装包包含了与该Android应用程序相关的所有文件apk文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包一个工程只能打进一个.apk文件apk文件的本质是一个zip包,.,12,HelloWorld!(3),Eclipse自动生成newandroidprojectHelloAndroid,.,13,HelloWorld!(4),代码:HelloWorld.java,packagecom.myapps.helloworld;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;publicclassHelloWorldextendsActivityOverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_hello_world);OverridepublicbooleanonCreateOptionsMenu(Menumenu)/Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.hello_world,menu);returntrue;,.,14,HelloWorld!(5),一个Activity就是一个类这个类要继承于Activity重写onCreate方法publicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_hello_world);,.,15,HelloWorld!(6),R.java,/*AUTO-GENERATEDFILE.DONOTMODIFY.*/packagecom.myapps.helloworld;publicfinalclassRpublicstaticfinalclassattrpublicstaticfinalclassdimenpublicstaticfinalintactivity_horizontal_margin=0 x7f040000;publicstaticfinalintactivity_vertical_margin=0 x7f040001;publicstaticfinalclassdrawablepublicstaticfinalintic_launcher=0 x7f020000;publicstaticfinalclassidpublicstaticfinalintaction_settings=0 x7f080000;publicstaticfinalclasslayoutpublicstaticfinalintactivity_hello_world=0 x7f030000;publicstaticfinalclassmenupublicstaticfinalinthello_world=0 x7f070000;publicstaticfinalclassstringpublicstaticfinalintaction_settings=0 x7f050001;publicstaticfinalintapp_name=0 x7f050000;publicstaticfinalinthello_world=0 x7f050002;publicstaticfinalclassstylepublicstaticfinalintAppTheme=0 x7f060001;,.,16,HelloWorld!(7),activity_hello_world.xml,Resources,.,17,HelloWorld!(8),每一个Activity都需要在AndroidMainfest.xml中文件当中进行配置为Activity添加必要的控件通过findViewById(控件的id);可以得到所要显示的控件例如取得TextView的控件TextViewtextView=(TextView)findViewById(R.id.Test);,.,18,HelloWorld!(9),布局文件中的属性很多通过布局文件来定义重要的属性android:layout_width宽度android:layout_height高度match_parent|wrap_contentandroid:layout_weight:权重(默认为0)android:id唯一标识,用于在程序或配置文件中引用,.,19,HelloWorld!(10),strings.xml,HelloWorldSettingsHelloworld!,将要显示内容:HelloWorld.,.,20,HelloWorld!(11),RUN,RUN,.,21,HelloWorld!(12),.,22,HelloWorld!(13),.,23,HelloWorld!(14),Activity是Android应用程序的用户接口一个Activity中可以放置很多控件Activity也可以理解为控件的容器,按钮,列表,文本,.,24,HelloWorld!(15),模拟器屏幕最大支持1280*80010.1”Tablet,WXGA7.3”Nexus7最小支持240*3202.7”QVGA,.,25,HelloWorld!(16),命令行运行启动模拟器emulator-avd2.3scaleauto,.,26,HelloWorld!(17),命令行运行连接模拟器telnetlocalhost5554,.,27,HelloWorld!(18),命令行运行拨打电话:gsmcal.,28,HelloWorld!(19),命令行运行发送短信:smssenelloWorld,.,29,Android程序结构,/srcJava源代码存放目录/gen自动生成目录存放所有由Android开发工具自动生成的文件,.,30,Android程序结构(2),/gen/R.javaR.java文件由Android开发工具自动产生的Android开发工具会自动根据放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件R.java文件是由开发工具自动生成的,应避免手工修改R.javaR.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id通过R.java,应用可以很方便地找到对应资源另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间,.,31,Android程序结构(3),/res资源(Resource)目录存放应用使用到的各种资源,如xml界面文件,图片或数据,.,32,Android程序结构(4),res目录下的资源文件除string之外,还可以定义color,dimensstring-array(子标记为item)每种资源都需要定义name属性资源文件放在res/values目录下可以是单独的文件可以分类放在不同文件中文件名任意资源目录中不能随意创建子目录布局资源的文件名和图片资源的文件名只允许小写字母和数字,.,33,Android程序结构(5),res/xml目录其他资源任意XML文件,程序中用R.xml.文件名访问res/raw目录原始资源程序中用Resources对象.openRawResource(R.raw.XXX)获得一个输入流原始资源不会被编译为二进制asset放入assets目录,系统不会自动生成id,程序中用Resources对象.getAssets().open(文件名)获得输入流assets目录则可以随意创建子目录,.,34,Android程序结构(6),对资源的引用程序中利用R.资源类型.资源名访问例如R.layout.mainR.id.abc或者使用getResources()得到Resources对象,用于将资源的id值转为相应的对象例如getText,getColor,getDrawableXML文件中利用资源类型/资源名访问例如id/abc+id/abc表示添加一个id资源“abc”,.,35,Android程序结构(7),AndroidManifest.xml列出了应用程序所提供的功能可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity包括了安全访问权限perties项目环境信息,一般是不需要修改此文件,Activity的生命周期,.,37,Activity的生命周期,Android应用程序不能控制所拥有进程的生存期Android系统在运行时管理每个应用程序的进程同样业管理每个进程内的每个活动Activity的管理所有的Activity由Android系统的Activity栈管理当前所有正在运行的进程的后进先出的集合Activity的状态由它在栈中的位置所决定一个新的Activity执行后被放置到栈的顶端,变成“runningactivity”,此前的Activity存在于堆栈中,一般不在前景如果通过“Back”返回此前的Activity或者当前Activity被关闭,栈中的下一个活动变成栈顶活动,并成为活动状态,.,38,Activity的生命周期(2),Activity的状态Activity在系统中不断的被创建和销毁在Activity栈中被移进和移出Activity在不同的状态中转换Activity的4个状态活动状态(Active)暂停状态(Paused)停止状态(Stop)非活动状态(Finish/Kill),.,39,Activity的生命周期(3),Activity:活动状态位于Activity栈的栈顶可见的、focused的前台Activity处于屏幕的最上层Android系统会尽力维持活动状态Activity的运行通过适当的销毁其他的Activity来保证活动状态Activity所需的资源当有某个Activity变为活动状态时,该活动被暂停处于paused状态,.,40,Activity的生命周期(4),Activity:暂停状态特定情况下可见但不是焦点的Activity非全屏或者半透明状态仍处于近似active的状态自身的状态和数据都存在与窗口管理程序保持联系不能接收用户的输入事件被系统终止当系统内存资源不足时会被终止状态的转变不可见时转变为停止状态,.,41,Activity的生命周期(5),Activity:停止状态当一个Activity被其它的Activity完全的遮盖住时,Activity的状态发生变化仍保有其状态及数据已变为不可见,画面是隐藏且不需要更新停止状态的Activity会被终止当系统内存不足时,stop状态的Activity首先被终止已释放内存状态的转换Activity退出或者被关闭,.,42,Activity的生命周期(6),Activity的终止不受程序员控制可以通过程序创建和运行Activity,并使用方法停止Activity终止Activity由Android系统决定当Activity处于pause或者stop状态时可能被系统终止并回收应用程序运行过程中的一些状态(用户输入等)需要保存到持久存储中应用程序中启动了其他后台线程,同样也需要进行处理否则会失去运行时的状态或输入或者由于没有处理后台线程导致异常,.,43,Activity的生命周期(7),Activity状态的转换除栈顶Activity外均为pause/stop/finish/kill状态一旦栈顶Activity失去焦点就变为pause/stop/finish/kill状态,同时新的Activity或者栈中的下一个Activity成为栈顶Activity转换的控制状态的转换由系统控制,对用户不可见转换过程中所存储的数据和状态在Activity转换为active状态时就需要进行恢复,.,44,Activity的生命周期(8),完整生命周期,可视生命周期,前台生命周期,.,45,Activity的生命周期(9),完整生命周期Activity的完整生命周期自第一次调用onCreate()方法开始,到调用onDestroy()为止如果Activity所在的进程被终止,那么即使没有调用onDestroy方法Activity也结束其存在在onCreate()中设置所有“全局”状态以完成初始化初始化Activity扩展(inflate)UI分配对类变量的引用将数据绑定到控件创建服务和线程在onDestroy()中释放所有系统资源通过重写来清除,保证所有外部资源被关闭,.,46,Activity的生命周期(10),Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束在此期间,用户可以在屏幕上看到Activity可能不是用户关注的活动,或者不与用户进行交互可以保留用来向用户显示这个Activity所需的资源Activity的可视生命周期可能多次经历onStart()和onStop()方法可以随着应用程序是否为用户可见而被多次调用在可视生命周期内可能被直接销毁,而不调用onStop方法,.,47,Activity的生命周期(11),onStop方法用来暂停或者停止动画、线程、计时器、服务或者其他专门用于更新UI的进程UI不可见时该方法只消耗资源而没有意义onStart/onReStart当UI可见时使用这两个方法恢复或者重启进程onReStart可以实现当Activity在其完整生命周期内重启才能完成的处理onStart/onStop也可以用来注册和销毁专门用来更新UI的广播接收器,.,48,Activity的生命周期(12),Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止在此期间,Activity位于前台最上面并与用户进行交互,接受用户的输入Activity会经常在暂停和恢复之间进行状态转换当Activity不被关注或者有新的Activity启动时,将调用onPause()方法当Activity获得结果或者接收到新的Intent时会调用onResume()方法onReusme()方法中的代码尽可能的少,以保证切换时的响应速度onPause()一般重写来托管未保存的改动处于pause状态的Activity可能被销毁,多Activity的使用,.,50,Log,android.util.Log类的静态方法查找错误和打印系统日志消息。Log常用的方法有以下5个:Log.v(Stringtag,Stringmsg);(VERBOSE)Log.d(Stringtag,Stringmsg);(DEBUG)Log.i(Stringtag,Stringmsg);(INFO)Log.w(Stringtag,Stringmsg);(WARN)Log.e(Stringtag,Stringmsg)。(ERROR),.,51,Log(2),根据规范建议Log.v、Log.d信息应当只存在于开发过程中最终版本只可以包含三种日志信息Log.iLog.wLog.e实际利用DDMS进行调试三种日志区别不大显示的颜色不同,.,52,Log(3),VVerboseDDebugIInfoWWarnEErrorFFatalSSilent,.,53,Log(4),Log.v(黑色)任何消息都会输出,一般用这个进行程序运行状态的输出Log.i(绿色)输出提示信息Log.d(蓝色)输出Debug信息Log.w(黄色)输出警告信息Log.e(红色)输出错误信息,.,54,Log(5),.,55,DDMS,DDMSDalvikDebugMonitorServiceIDE、emulator与实际android设备之间通信的桥梁DDMS的作用捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的为测试设备截屏针对特定的进程查看正在运行的线程以及堆信息Logcat广播状态信息模拟电话呼叫接收SMS虚拟地理坐标等等,.,56,DDMS(2),开启DDMS,.,57,DDMS(3),.,58,音频播放实例,播放音频资源android.media.MediaPlayerp=MediaPlayer.create(Context,R.raw.XXX);p.prepare();p.start();/播放播放外部音频文件MediaPlayerp=newMediaPlayer();p.setDataSource(url)/url可以是/sdcard/XXX也可以是网络中的URLp.prepare();p.start();,.,59,音频播放实例(2),android应用开发解密书中第7章代码,.,60,音频播放实例(3),程序编译通过,运行错误,.,61,音频播放实例(4),LogCat信息,.,62,音频播放实例(5),.,63,音频播放实例(6),.,64,音频播放实例(7),.,65,音频播放实例(8),.,66,音频播放实例(9),将文件发送到设备上,.,67,音频播放实例(10),.,68,SDCard,在模拟器中使用SDCard需要先创建一张SDCard卡创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用命令行方式进行创建:在命令行窗口中进入androidSDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀建议使用.imgmksdcard2048MD:sdcard.img,.,69,SDCard(2),程序中访问SDCard需要申请访问SDCard的权限在AndroidManifest.xml的Manifest标签中加入访问SDCard的权限如下,.,70,SDCard(3),向SDCard存放文件程序必须先判断手机是否装有SDCard,并且可以进行读写if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)FilesdCardDir=Environment.getExternalStorageDirectory();FilesaveFile=newFile(sdCardDir,“abc.txt”);android.os.Environment.getExternalStorageState()方法用于获取SDCard的状态如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于MEDIA_MOUNTEDEnvironment.getExternalStorageDirectory()方法用于获取SDCard的目录或者写成FilesaveFile=newFile(/sdcard/abc.txt);,.,71,SDCard(4),.,72,SDCard(5),.,73,SDCard(6),.,74,SDCard(7),.,75,SDCard(8),.,76,SDCard(9),.,77,MediaPlayer的生命周期,创建-setDatasourse-prepare-start-pause-start-stop-release调用stop进入停止状态,再播放要先调用prepare再调用start,.,78,MediaPlayer的生命周期(2),.,79,MediaPlayer的生命周期(3),tryMediaPlayerplayer=newMediaPlayer();player.setDataSource(/sdcard/nx.mp3);player.prepare();player.start();Thread.sleep(15000);player.stop();Thread.sleep(5000);player.prepare();player.start();Thread.sleep(20000);player.stop();player.release();catch(Exceptione)e.printStackTrace();,.,80,模拟器来电铃声设定,.,81,模拟器来电铃声设定(2),.,82,模拟器来电铃声设定(3),铃声选择为空,所以来电都没有铃声,.,83,将sdcard上某音乐加入铃声,publicclassMainActivityextendsActivityprivatestaticfinalStringTAG=LogDemo;OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getmusicfromsdcard();/EmLession+,.,84,将sdcard上某音乐加入铃声(2),privatevoidgetmusicfromsdcard()Stringfilename=/sdcard/ydgqq5.mp3;Filek=newFile(filename);/pathisafileto/sdcardContentValuesvalues=newContentValues();values.put(MediaStore.MediaColumns.DATA,k.getAbsolutePath();values.put(MediaStore.MediaColumns.TITLE,“ydggq5”);values.put(MediaStore.Audio.Media.IS_RINGTONE,true);values.put(MediaStore.Audio.Media.IS_NOTIFICATION,false);values.put(MediaStore.Audio.Media.IS_ALARM,false);values.put(MediaStore.Audio.Media.IS_MUSIC,false);,.,85,将sdcard上某音乐加入铃声(3),/InsertitintothedatabaseUriuri=MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath();UrinewUri=getContentResolver().insert(uri,values);tryRingtoneManager.setActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE,newUri);catch(Throwablet)Log.d(TAG,“catchexception”);,.,86,设置某音乐为当前铃声,.,87,设置某音乐为当前铃声(2),.,88,音频采集录音,创建MediaRecorder对象rec(来自android.media包)开始录音创建File对象,扩展名为amr,rec.setOutputFile(f.getAbsoulutePath()rec.setAudioSource(MediaRecorder.AudioSource.MIC)/设置声源rec.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT)/输出格式rec.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)/音频格式rec.prepare()rec.start()结束录音rec.stop()rec.release()rec=null权限android.permission.RECORD_AUDIO,.,89,音频采集录
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版购销合同协议书补充协议
- 2025年事业单位工勤技能-河北-河北计算机信息处理员五级初级历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北城管监察员二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西机械热加工五级(初级工)历年参考题库含答案解析(5套)
- 新解读《GB-T 36444-2018信息技术 开放系统互连 简化目录协议及服务》
- 2025年事业单位工勤技能-江苏-江苏检验员三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广东-广东水利机械运行维护工五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东家禽饲养员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东兽医防治员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-安徽-安徽计算机操作员一级(高级技师)历年参考题库典型考点含答案解析
- 公共场所卫生知识培训材料
- 证据目录范本
- 标准档案盒脊背(格式已设置好)
- GB/T 21475-2008造船指示灯颜色
- 园林绿化工高级技师知识考试题库(附含答案)
- 安医大生殖医学课件04胚胎的培养
- 可下载打印的公司章程
- 关于推荐评审高级工程师专业技术职务的推荐意见报告
- Q∕GDW 10356-2020 三相智能电能表型式规范
- 教研工作手册
- CINV化疗相关呕吐课件
评论
0/150
提交评论