Activity及生命周期
startactivityforresult用法

startactivityforresult用法startActivityForResult是用来在一个Activity和另一个Activity交互返回结果的机制,可以让第一个Activity接收第二个Activity返回的结果。
由于它是一种非常重要的Activity-To-Activity交互机制,因此在介绍startActivityForResult之前,我们需要先了解Activity的生命周期。
一个Activity有七个不同的生命周期:OnCreate()、OnStart()、OnResume()、OnPause()、OnStop()、OnRestart()和OnDestroy()。
StartActivityForResult方法将在OnActivityResult()方法中回调,该方法在onRestart()之后执行。
调用startActivityForResult()方法来启动另一个Activity的流程如下:1)启动startActivity()方法来启动第二个Activity。
2)第二个Activity执行完成,它将调用setResult()方法来返回结果。
3)第一个Activity调用OnActivityResult()方法,以检索从第二个Activity发出的结果。
StartActivityForResult方法很重要,它允许两个不同的Activity之间进行数据传递,它还可以在一个Activity中回调第二个Activity的返回结果。
使用StartActivityForResult方法可以利用调用任何Activity,从而实现最佳用户体验及交互性。
因此,StartActivityForResult()是一种Android开发者在开发六大应用时必不可少的技术,其主要用途是在两个不同的Activity之间进行数据传递返回结果,以及在一个Activity中回调第二个Activity的结果。
android测试题及答案

android测试题及答案1. Android系统中,Activity的生命周期包含哪些状态?- A. onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()- B. onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart()- C. onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart(), onDestroy()- D. onCreate(), onRestart(), onStart(), onResume(), onPause(), onStop(), onDestroy()答案:C2. 在Android开发中,如何实现Activity之间的数据传递?- A. 使用Intent对象- B. 使用SharedPreferences- C. 使用数据库- D. 使用文件存储答案:A3. Android中,Service和Activity有什么区别?- A. Service没有用户界面,而Activity有- B. Activity没有用户界面,而Service有- C. Service和Activity都没有用户界面- D. Service和Activity都有用户界面答案:A4. Android中,如何实现屏幕旋转时Activity数据的保存和恢复? - A. 重写onSaveInstanceState()和onRestoreInstanceState()方法- B. 重写onPause()和onResume()方法- C. 重写onCreate()和onDestroy()方法- D. 重写onStart()和onStop()方法答案:A5. 在Android中,如何监听屏幕的亮灭状态?- A. 使用SensorManager监听光线传感器- B. 使用PowerManager监听电源状态- C. 使用BroadcastReceiver监听ACTION_SCREEN_OFF和ACTION_SCREEN_ON广播- D. 使用Handler定时检测电源状态答案:C6. Android中,如何实现应用的多语言支持?- A. 在res目录下创建不同语言的资源文件,并在代码中动态加载- B. 使用SharedPreferences存储用户选择的语言,并在代码中动态加载- C. 在代码中硬编码不同语言的字符串- D. 使用第三方库自动翻译应用内容答案:A7. 在Android开发中,如何实现应用的后台运行?- A. 使用Service- B. 使用BroadcastReceiver- C. 使用ContentProvider- D. 使用IntentService答案:A8. Android中,如何实现应用的权限请求?- A. 在AndroidManifest.xml中声明权限- B. 在代码中动态请求权限- C. 同时使用A和B- D. 无需请求权限答案:C9. Android中,如何实现应用的横竖屏切换?- A. 在AndroidManifest.xml中设置Activity的android:screenOrientation属性- B. 在代码中动态设置Activity的requestedOrientation属性 - C. 使用SensorManager监听屏幕旋转事件- D. 使用Handler定时检测屏幕旋转状态答案:A10. 在Android开发中,如何实现应用的内存优化?- A. 避免内存泄漏- B. 减少Bitmap的使用- C. 使用对象池- D. 以上都是答案:D结束语:以上是Android测试题及答案,希望对您的学习和工作有所帮助。
常见Android面试题及答案(详细整理)

常见Android⾯试题及答案(详细整理)1. 请描述⼀下Activity ⽣命周期。
答: 如下图所⽰。
共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。
onCreate(): 创建Activity时调⽤,设置在该⽅法中,还以Bundle的形式提供对以前存储的任何状态的访问。
onStart(): Activity变为在屏幕上对⽤户可见时调⽤。
onResume(): Activity开始与⽤户交互时调⽤(⽆论是启动还是重新启动⼀个活动,该⽅法总是被调⽤。
onPause(): Activity被暂停或收回cpu和其他资源时调⽤,该⽅法⽤户保护活动状态的,也是保护现场。
onStop(): Activity被停⽌并转为不可见阶段及后续的⽣命周期事件时调⽤。
onRestart(): Activity被重新启动时调⽤。
该活动仍然在栈中,⽽不是启动新的Activity。
1、完整⽣命周期: 即从⼀个Activity从出现到消失,对应的周期⽅法是从onCreate()到onDestroy()。
2、可见⽣命周期: 当Activity处于可以⽤户看见的状态,但不⼀定能与⽤户交互时,将多次执⾏从onStart()到onStop()。
3、前景⽣命周期: 当Activity处于Activity栈最顶端,能够与其他⽤户进⾏交互时,将多次执⾏从onResume()到onPause()。
2. 两个Activity之间跳转时必然会执⾏的是哪⼏个⽅法。
答: 两个Activity之间跳转必然会执⾏的是下⾯⼏个⽅法。
onCreate()//在Activity⽣命周期开始时调⽤。
onRestoreInstanceState()//⽤来恢复UI状态。
onRestart()//当Activity重新启动时调⽤。
activity的介绍与使用

activity的介绍与使用Activity是Android应用程序中的一个关键组件,它提供了用户与应用程序交互的界面。
通过Activity,用户可以执行各种操作,如查看信息、输入数据、浏览网页等。
在Android应用程序开发中,Activity的使用非常广泛,可以说是Android应用程序的基础。
让我们来了解一下Activity的基本概念和特点。
Activity是Android应用程序的核心组件之一,它是一个单独的屏幕,用于展示用户界面。
每个Activity都有自己的生命周期,包括创建、启动、暂停、恢复、停止和销毁等阶段。
在每个阶段,Activity都可以执行一些特定的操作,如初始化界面、保存数据、响应用户事件等。
在Android应用程序中,一个应用程序通常由多个Activity组成,每个Activity负责展示不同的界面。
通过Activity之间的切换,用户可以在不同的界面之间进行导航。
例如,一个应用程序可能有一个主界面Activity,用于展示应用程序的主要功能;另外,还有一些子界面Activity,用于展示一些次要功能或详细信息。
为了使用Activity,我们需要在AndroidManifest.xml文件中进行配置。
在该文件中,我们需要声明每个Activity的名称、入口点、主题等信息。
通过配置文件,系统可以识别并启动相应的Activity。
在开发过程中,我们可以通过继承Activity类来创建自定义的Activity。
通过重写Activity类中的方法,我们可以实现自己的业务逻辑。
例如,我们可以重写onCreate()方法,在该方法中初始化界面和数据;我们还可以重写onPause()方法,在该方法中保存数据和释放资源。
除了基本的生命周期方法外,Activity还提供了一些其他的方法,用于处理用户事件、与其他组件进行交互等。
例如,我们可以通过setOnClickListener()方法为按钮设置点击事件监听器;我们还可以通过startActivity()方法启动其他Activity。
安卓大型实验报告(3篇)

第1篇一、实验背景随着移动互联网的快速发展,Android作为全球最流行的移动操作系统,其应用开发领域日益广阔。
为了深入了解Android开发技术,提高编程能力,我们开展了此次大型安卓实验。
本实验旨在通过实际操作,掌握Android开发的基本流程、常用技术以及项目开发经验。
二、实验目的1. 熟悉Android开发环境,包括Android Studio、JDK、Android SDK等。
2. 掌握Android应用开发的基本流程,包括需求分析、设计、编码、测试、发布等。
3. 熟悉Android常用技术,如Activity、Service、BroadcastReceiver、ContentProvider等。
4. 学会使用Android常用开发工具,如AndroidManifest.xml、布局文件、资源文件等。
5. 实践开发一个完整的Android应用,提高项目开发经验。
三、实验内容1. 需求分析我们计划开发一个Android应用,实现以下功能:- 用户注册、登录、个人信息管理。
- 动态发布、浏览、评论新闻。
- 朋友圈功能,包括发布动态、查看好友动态、点赞、评论等。
- 消息通知、好友管理、系统设置等。
2. 设计根据需求分析,我们设计以下功能模块:- 用户模块:负责用户注册、登录、个人信息管理等功能。
- 新闻模块:负责新闻发布、浏览、评论等功能。
- 朋友圈模块:负责发布动态、查看好友动态、点赞、评论等功能。
- 消息通知模块:负责消息通知、好友管理、系统设置等功能。
3. 编码(1)搭建开发环境1. 安装JDK,配置环境变量。
2. 安装Android Studio,创建新项目。
3. 配置Android SDK,下载所需API。
(2)实现功能模块1. 用户模块:- 使用SQLite数据库存储用户信息。
- 实现用户注册、登录、个人信息管理等功能。
2. 新闻模块:- 使用网络请求获取新闻数据。
- 实现新闻浏览、评论等功能。
activity绘制流程

activity绘制流程Activity是Android应用开发中最重要的概念之一,它是用户界面展示和交互的主要入口。
下面将介绍Activity的绘制流程。
1. 创建Activity对象在启动Activity之前,系统会调用Activity的构造函数来创建一个Activity对象。
2. 调用onCreate()方法在Activity对象创建之后,系统会调用onCreate()方法,这是Activity的生命周期方法之一。
在这个方法中,我们通常会进行界面布局、数据初始化等操作。
3. 调用onStart()方法当Activity被创建之后,系统会调用onStart()方法,表明Activity即将可见,但并不会立即显示在屏幕上。
4. 调用onResume()方法在onStart()方法执行完毕之后,系统会调用onResume()方法,此时Activity 已经可见,并开始响应用户的交互操作。
5. 绘制Activity窗口在onResume()方法执行完毕之后,系统会调用Activity的绘制方法,也就是onDraw()方法。
在这个方法中,系统会根据我们在onCreate()方法中设置的布局文件来绘制Activity的窗口。
6. 调用onPause()方法当用户离开当前Activity,或者其他Activity覆盖了当前Activity时,系统会调用onPause()方法,此时Activity将不再响应用户的交互操作。
7. 调用onStop()方法当Activity完全被遮挡或销毁时,系统会调用onStop()方法,表明Activity已经不再可见。
8. 调用onDestroy()方法当Activity被销毁时,系统会调用onDestroy()方法,此时Activity将被彻底回收。
以上就是Activity的绘制流程,理解和掌握这个流程对于Android应用开发来说至关重要。
android 多窗口实现原理
android 多窗口实现原理在Android7.0(N)之后,Android 系统开始支持多窗口模式,这使得用户可以同时在一个屏幕上运行多个应用程序。
多窗口模式提供了更好的多任务处理能力,增强了用户体验。
那么,Android 是如何实现多窗口模式的呢?下面我们就来详细了解一下。
1. 窗口管理器Android 窗口管理器是 Android 系统中最重要的一个组件之一。
它是负责管理窗口的显示、隐藏、移动、调整大小等操作的。
在多窗口模式下,窗口管理器会根据用户的操作,调整窗口的位置、大小等属性。
2. Activity 生命周期在多窗口模式下,Activity 的生命周期会发生变化。
当一个Activity 进入多窗口模式时,它会接收到onMultiWindowModeChanged() 方法的回调。
该方法可以用来确定当前 Activity 是否处于多窗口模式,并进行相应的处理。
3. 窗口模式Android 系统中的窗口分为多种类型,例如应用程序窗口、对话框、Toast 等。
在多窗口模式下,每个窗口都有一个窗口模式(window mode)。
其中,窗口模式有两种:1)标准模式(standard mode)标准模式是 Android 系统中的默认窗口模式,它代表着一个应用程序窗口。
在多窗口模式下,标准模式的窗口可以移动、调整大小等属性。
2)自由形式模式(free-form mode)自由形式模式是 Android 系统中的一种新的窗口模式,它允许应用程序以自由形式的方式布局窗口。
在自由形式模式下,窗口可以被拖动、调整大小,也可以与其他窗口重叠。
4. 窗口布局在多窗口模式下,窗口布局的管理变得更加复杂。
Android 系统需要根据用户的操作,动态地调整窗口的位置、大小、显示顺序等。
为了实现这一目标,Android 系统采用了一种新的窗口布局方式,称为分层窗口布局(hierarchical window layout)。
麦子学院Android开发教程Activity管理机制
Android的管理主要是通过Activity栈和Task来进行的,这里将着重讲解Activity栈、Task以及Activity生命周期等概念。
1. Activity栈Android的管理主要是通过Activity栈来进行的。
当一个Activity启动时,系统根据其配置或调用的方式,将Activity压入一个特定的栈中,系统处于运行(Running or Resumed)状态。
当按Back键或触发finish()方法时,Activity会从栈中被压出,进而被销毁,当有新的Activity压入栈时,如果原Activity仍然可见,则原Activity的状态将转变为暂停(Paused)状态,如果原Activity完全被遮挡,那么其状态将转变为停止(Stopped)。
2. TaskTas与Activity栈有着密切的联系。
一个Task对应于一个Activity栈,Task是根据用户体验组成的运行期逻辑元素,其与应用的区别是,Task中的Activity可以由不同的应用组成。
在实际的终端使用中,在主界面长按Home键时弹出的一个网格界面即是当前运行的Task而非应用。
Task的定义位于frameworks\base\services\java\com\android\server\am\目录下的TaskRecord.java中,一个Task由tasked、affinity(亲和性)、clearOnBackground、intent、affinityIntent、origActivity、realActivity、numActivities、lastActiveTime、rootWasReset、stringName等属性构成。
(1)Task间移动配置android:allowTaskReparenting属性用来配置是否允许Activity从启动它的Task移动到和该Activity设置的Task亲和性相同的Task中,示例如下:<activity android:name="android.app.cts.ActivityManagerRecentOneActivity"android:label="ActivityManagerRecentOneActivity"android:allowTaskReparenting="true"android:taskAffinity="android.app.cts.recentOne"><intent-filter><action android:name="android.intent.action.MAIN" /></intent-filter></activity>(2)Task状态配置android:alwaysRetainTaskState属性用于配置是否保留Activity所在的Task状态,默认为“false”。
Android教学大纲
Android教学大纲一、Android学习进度规划:第1周:【UI基础】•第1天:•第2天:•第3天:常用UI控件及事件处理•第4天:•第5天:Activity生命周期【知识点】1.常用UI布局及主要控件•LinearLayout、RelativeLayout常用属性【重点讲解】•FrameLayout、GridLayout常用属性•TextView、Button、ImageView、Toast的基本用法3.表单三大UI控件及相应控件的事件处理及部分特殊drawable资源(selector、shape)•RadioButton及RadioGroup的用法:【重点】单选、监听事件、利用selector实现选中与否、改变默认单选button的显示效果、修改topDrawable•CheckBox的多选效果及监听。
利用selector及shape修改多选框的显示效果•Spinner的用法•ArrayAdapter适配器的基本用法•数组资源String Array•ProgressBar、SeekBar、RatingBar的基本用法及美化5.Activity生命周期第2周:•第6天: Activity管理及Intent七大属性•第7天: AsyncTask异步任务•第8天: ListView基本用法•第9天: ListView分页及优化•第10天:图文混排+GridView【知识点】1.Activity页面跳转、生命周期及Intent七大属性2.AsyncTask异步任务3.ListView基本用法及适配器4.ListView分页及优化 + item多种布局的ListView5.GridView图文混排第3周:•第11天: Menu+Dialog+Toast•第12天: Fragment•第13天: SharedPreferences、SDCard及网络存储 + HttpURLConnection 实现文件上传•第14天: SQLite数据库 + WebView•第15天: ContentProvider之ContentResolver【知识点】1.Menu(选项菜单、上下文菜单、PopupWindow自定义菜单)+Dialog+Toast2.Fragment基本用法、生命周期、Fragment间传值3.SharedPreferences、内部文件存储及外部文件存储SDCard4.SQLite数据库 + WebView5.ContentProvider之ContentResolver第4周:•第16天:自定义ContentProvider•第17天: Loader异步装载•第18天: Handler与多线程•第19天: ActionBar + LruCache + Bitmap二次采样•第20天: ViewPager【知识点】1.自定义ContentProvider2.Loader异步装载器(CursorLoader及AsyncTaskLoader)3.Handler与多线程及源码分析4.ActionBar + 图片缓存(图片三层缓存策略、LruCache、Bitmap二次采样生成缩略图)5.ViewPager(制作欢迎引导页及加载网络图片的ViewPager及自动播放的ViewPager)第5周:•第21天: TAB书签导航•第22天: BroadcastReceiver + Notification•第23天: Service1•第24天: Service2【知识点】1.TAB书签导航制作•FragmentTabHost制作TAB书签导航•Fragment + RadioGroup制作TAB书签导航•Fragment + ViewPager + RadioGroup制作TAB书签导航•Fragment + 带滑动导航条的ViewPager 制作TAB书签导航•Fragment + ViewPager + HorizontalScrollView自定义滑动导航条•Fragment + ActionBar制作TAB书签导航•Fragment + ActionBar + ViewPager制作TAB书签导航2.BroadcastReceiver + 自定义广播 + Notification3.Service(一)(服务的概念及分类、被启动服务和被绑定服务实现音乐播放的用法)4.Service(三)(远程服务:AIDL及Messenger)第6周:•第26天:百度地图 2•第27天:动画资源 + 样式、主题及drawable资源•第28天:屏幕适配•第29天:自定义View(上)•第30天:自定义View(下)【知识点】1.百度地图基本用法2.动画资源(帧动画、补间动画、属性动画基本用法)3.屏幕适配及UI美化(样式、主题及特殊的drawable资源:selector、shape、level-list、layer-list等)4.(继承于EditText、ListView)5.自定义View(继承于View、)第8周:•第36天: Volley框架•第37天: UIL框架•第38天: xUtils框架•第39天:SlidingMenu及DrawerLayout + PullToRefresh等其他第三方技术•第40天:事件分发及消费机制【知识点】1.Volley框架2.UIL(Universal-Image-Loader)框架3.(ViewUtils \ HttpUtils \ BitmapUtils \ DBUtils)4.PullToRefresh(下拉刷新)+ 瀑布流及常用第三方菜单技术:SlidingMenu(侧滑菜单)、DrawerLayout (抽屉)、ResideMenu(驻留菜单)、SatelliteMenu(卫星菜单)5.事件分发及消费机制(TouchEvent)第9周:•第41天:Gesture手势及 SurfaceView•第42天:播放器及摄像头•第43天: RecyclerView、CardView•第44天:传感器、WiFi及蓝牙通讯•第45天:ShareSDK一键分享及第三方登录 + 第三方支付 + JPush推送【知识点】1.Gesture手势 + SurfaceView2.播放器及摄像头(音乐播放、视频播放VideoView、摄像头)3.RecyclerView、CardView4.WiFi及蓝牙通讯、ShareSDK一键分享及第三方登录 + Alipay第三方支付 +JPush推送二、常用框架技术1.网络访问框架•Retrofit(网络访问)•AsyncHttpClient(【了解】)•Volley框架(StringRequest、JsonObjectRequest、JsonArrayRequest、ImageRequest、NetworkImageView)2.反转注入框架•ButterKnife•xUtils框架(ViewUtils \ HttpUtils \ BitmapUtils \ DBUtils)3.图片异步加载框架•Picasso•Fresco•UIL(Universal-Image-Loader)框架4.数据库ORM•GreenDao•ActiveAndroid三、考核内容必选:1.ListView、GridView、ScrollView、WebView2.assets及各种资源(selector、raw、string、color、dimens、style、array,必须采用软编码编程风格)3.动画资源(帧动画、补间动画)4.上下文菜单、PopupWindow、Dialog5.数据存储:SharedPreferences、内部文件存储、SD卡存储、SQLite数据库操作6.ContentResolver7.CursorLoader异步装载8.Handler与多线程或AsyncTask9.图片缓存10.屏幕自适应、版本自适应11.自定义View(至少三个)12.TAB导航(ViewPager、Fragment)13.广播、服务、通知14.DrawerLayout、SlidingMenu或其他第三方菜单15.PullToRefresh项目阶段必选:16.TouchEvent及手势17.Volley、xUtils、UIL框架或其他类似网络访问及异步加载图片的框架18.瀑布流19.混淆打包可选:1.SurfaceView2.音乐播放器或视频播放(自定义MediaController)3.RecyclerView、CardView4.传感器5.ShareSDK一键分享及第三方登录6.JPush或其他推送技术7.Alipay或其他支付技术8.WiFi或蓝牙通讯9.文件加密及解密10.地图。
紫光面试试题-答案
1、Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指dalivk的虚拟机。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。
2、sim卡的EF 文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的3、嵌入式操作系统内存管理有哪几种,各有何特性?页式,段式,段页,用到了MMU,虚拟空间等技术4、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?、嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。
主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。
又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
5、一条最长的短信息约占多少byte?中文70(包括标点),英文160个字节6、android中的动画有哪几类,它们的特点和区别是什么?两种,一种是Tween动画、还有一种是Frame动画。
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
7、handler机制的原理andriod提供了Handler 和Looper 来满足线程间的通信。
Handler 先进先出原则。
Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android Activity生命周期一般来说Android程序主要由下列4部分组成·Activity·Broadcast Receiver·Service·Content ProviderActivity 介绍·一个应用程序是由一个或者多个Activity组成·一个Activity代表了可以和用户进行交互的可视化界面。
·Activity在Android应用的onCreate中初始化通过布局管理添加各种View组件·通过setContentView(int) 方法可以将视图呈现出来Broadcast Receiver介绍·Broadcast Receiver负责对外部事件做出响应·Broadcast Receiver不生成UI,是不可见的·Broadcast Receiver需要在程序中进行注册·应用程序可以通过Context.sendBroadcast()将自己的intent广播出去。
其他程序通过自身的BroadcastReceivers截获后进行时间处理。
Service 介绍·service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。
比如下载数据,播放音乐等。
·service是跑在程序的主线程中,处理耗时的事件续·service没有用户界面·所有用户实现的service必须继承系统的Service类,并且在配置文件中进行注册。
Content Provider 介绍·数据在Android当中是程序私有的·Content Provider提供了多个程序间数据交互的机制。
·Content Provider暴露出来一些标准的API来对数据进行操作:1.query(Uri, String[], String, String[],String) :通过关键字查询数据2.insert(Uri, ContentValues) :将一组数据插入到指定的地方3.update(Uri, ContentValues, String, String[]) :更新数据4.delete(Uri, String, String[]) :删除数据Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:public class Activity extends ApplicationContext {protected void onCreate(Bundle savedInstanceState);protected void onStart();protected void onRestart();protected void onResume();protected void onPause();protected void onStop();protected void onDestroy();}便于理解上图示中的生命周期见HelloAndroidActivity.java.我们运行调试。
通过图示和分析程序得出三种生命周期:1.整体生命周期:onCreate()-……..-> onDestory();2.可视生命周期:onStart-……..-> onStop();3.活动生命周期(或者称为焦点生命周期):onResume()-……..-> onPause();1、程序启动运行Activity执行顺序:onCreate()->onStart()->onResume三个方法,见LogCat 。
程序启动。
2、BACK键等退出销毁,Activity先后执行:onPause()->onStop()->onDestory()三个方法,见LogCat。
程序销毁退出。
3、HOME键等运行中被打断时(比如突然打入电话),Activity先后执行: onPause()->onStop()这两个方法。
此时程序并未退出,只是在保存于后台状态栈中。
4、再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法,重新调出程序到前台显示。
!!!引出一个问题,当我们按HOME键或程序运行中被打断时,我们应用的状态如何保存(举例)?(见演示)几点总结:onCreate: 在这里创建界面,做一些数据的初始化工作。
onStart: 到这一步变成用户可见不可交互的。
onResume: 变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)onPause: 到这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情,从上文演示中已经知道,应该在这里保存一些数据,因为这个时候本程序的优先级降低,有可能被系统收回。
在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动onstop: 变得不可见,被下一个activity覆盖了onDestroy:这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。
由上:由于android系统中,Activit生命周期、内存管理等都是交给系统自动管理的,实际工作中因为生命周期的变化而带来的问题也很多,onPause,onstop,onDestroy三种状态下activity都有可能被系统管理机制给干掉,丢失数据及状态,所以为了保证程序的正确性与合理性,所以特别注意onPause()里数据的处理,比如写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库,还有xml等)。
当然我们一般是采用Android的消息机制[Handler,Message]来处理多线程和界面交互的问题来避免这些状态丢失问题,后边讲。
注意各个事件的处理,状态的保存;同时以后的开发中注意,当Activity某一个生命周期运行时间过长,占用内存过大时,注意防止被android自动内存管理回收机制给干掉。
1.1 强制保持Android Activity状态有的时候我们的Android在应用运行时,可能需要临时退出,比如突然接到来电,但是切换回来界面时,可能Activity又重新从第一个界面开始显示,并不是刚才用户操作的界面,这里可以通过在androidmanifest.xml中在需要保留的activity中添加android:alwaysRetainTaskStat="true" 这句即可,这里要提醒大家的是有时候你的应用可能会产生多个实例,你还可以在主Activity中加入android:launchMode="singleInstance" 来强制让系统仅运行一个实例。
2.Android开机自启动程序背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。
只要在程序中“捕捉”到这个消息,再启动之即可。
记住,Android框架说:Don''t call me, I''ll call you back。
我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。
Android应用的工程文件组成·src源文件(java文件)·R.java文件·assets目录·res目录(资源)·drawable目录·layout目录·values目录AndroidManifest.xml·声明应用程序的构成·程序包的全局变量·活动(Activities)·内容管理器(Content Providers)·服务(Services)·广播接收器(Broadcast Receivers)·请求安全授权(uses-permission)·声明安全授权(permission)AndroidManifest.xml文件剖析对于Android全局配置文件AndroidManifest.xml 完整的结构以及每个节点的作用。
在我们日常的开发中都少不了下面的配置,每创建一个Activity、Service都离不开这个全局配置文件,深入的了解可以简化程序代码以及提高程序的维护性。
在最外层包含了包名、软件的版本android:versionCode="1" 以及android:versionName="1.0" ,里面一层的application分支中将可能包含Android程序的四种对象Activity、Service、Content Provider以及Receiver。
我们每添加上面四个类型中的任一新对象都需要在androidmanifest.xml文件中添加相应节点。
其中Activity的属性常用的可能为android:name和android:label但我们需要了解所有的属性以帮助解决复杂的问题,完整的如下:android:allowTaskReparenting=["true" | "false"]android:alwaysRetainTaskState=["true" | "false"]android:clearTaskOnLaunch=["true"" | "false"]android:configChanges=[one or more of: "mcc" "mnc" "locale""touchscreen" "keyboard" "keyboardHidden""navigation" "orientation" "fontScale"]android:enabled=["true" | "false"]android:excludeFromRecents=["true" | "false"]android:exported=["true" | "false"]android:finishOnTaskLaunch=["true" | "false"]android:icon="drawable resource"android:label="string resource"android:launchMode=["multiple" | "singleTop" |"singleTask" | "singleInstance"]android:multiprocess=["true" | "false"]android:name="string"android:noHistory=["true" | "false"]android:permission="string"android:process="string"android:screenOrientation=["unspecified" | "user" | "behind" |"landscape" | "portrait" |"sensor" | "nonsensor"]android:stateNotNeeded=["true" | "false"]android:taskAffinity="string"android:theme="resource or theme"android:windowSoftInputMode=[one or more of: "stateUnspecified""stateUnchanged" "stateHidden""stateAlwaysHidden" "stateVisible""stateAlwaysVisible" "adjustUnspecified""adjustResize" "adjustPan"] >有关AndroidManifest.xml文件的application分支我们有必要了解一些常见的属性,这里可以看到一些我们实用的选项,比如允许调试android:debuggable、任务关系android:taskAffinity,比如我们常见的方式创建一个新的任务实用标记FLAG_ACTIVITY_NEW_TASK,为程序制定一个主题,可以使用android:theme 指向一个主题文件。