5、Android应用程序组件Activity进阶(教程与案例)
Android移动应用开发案例教程(慕课版)-课程大纲.docx

Undroid移动应用开发》课程大纲5. 4. Activity 的传值5. 4. 1. Activity跳转时传递数据5. 4. 2.获得Activity返回的数据5. 4. 3.案例3:个人信息发送与接收APP开发5. 5. Activity的生命周期5. 5.1关于任务和返回栈5.5.2 Activity生命周期的回调方法5. 5.3案例4:体验Activity的生命周期5. 6.案例5:用户注册及登录APP开发5. 7.课程小结5. 8.课后练习5. 9.课堂笔记5. 10.实训记录六、Android 高级组件List View 和RecyclerView 6.1.学习目标6.2.ListView 控件6.2.1.List View 控件介绍6.2.2.ListView控件的使用6.2.3.ListView 常用Adapter6.2.4.案例1:使用List View完成通讯录开发6.3.Base Adapter 适配器6.3.1.BaseAdapter 适配器介绍6.3.2.BaseAdaptcr适配器的使用6.3.3.案例2:使用BaseAdapter升级通讯录6.4.ListView 的常用Listener6.4.1.ListView 的Listener 简介6.4.2.ListView 的Listener 使用6.4.3.案例3:完成通讯录的选中及下拉刷新功能6.5.RecyclerView 控件6.5.1.RecyclerView 控件介绍6.5.2.RecyclerView 控件的使用6.5.3.案例4:使用RecyclerView开发我爱电影6.6.RecyclerView 的Listener6.6.1 .RecyclerView 的单击监听6.6.2.SwipcRcfrcshLayout 刷新控件的使用6.6.3.案例5:完成我爱电影的选中及刷新功能6.7.课程小结6.8.课后练习6.9.课堂笔记6.1().实训记录七、Android 高级控件ViewPager 和Fragment 7.1学习目标7.2 ViewPager控件使用7.2.1ViewPager 介绍7.2.2PagerAdapter 介绍和用法7.2.3案例1: APP启动页的开发7.3 Fragment 使用7.3.1Fragment 介绍7.3.2Fragment的生命周期7.3.3Fragment适配器介绍7.3.4案例2: APP底部导航功能开发7.4案例3:商城导航APP开发7.5课程小结7.5课后练习1.7.课堂笔记1.8.实训记录八、Android的网络编程Volley 和Gson框架8.1学习目标8.2HTTP协议简介8.3Volley框架的使用8.3.1Volley框架的简介8.3.2Android 中使用Volley8.3.3案例1:狗狗图片APP8.4JSON数据解析8.4.1JSON格式数据介绍8.4.2JSON格式数据解析8.4.3案例2:我爱电影APP (网络版)8.5Gson框架的使用8.5.1Gson框架简介8.5.2Gson使用流程8.5.3案例3:使用Gson框架改造我爱电影(网络版)8.6课程小结8.7课后练习8.8.课堂笔记8.9.实训记录九、综合项目:影视分享APP开发9.1学习目标9.2项目需求9. 3 Meterial Design风格界面设计9. 3. 1 Meterial Design 风格9. 3. 2侧滑导航9. 3. 3菜单项切换9.3.4悬浮按钮和底部消息9.4搭建项目图片与数据访问框架9.4.1图片及数据访问框架配置9. 4. 2 JavaBean 设计9.4.3数据访问框架测试9. 5电影列表功能开发9. 5. 1需求描述9. 5. 2 UI布局设计9. 5. 3业务功能实现9. 5.4运行效果。
activity流程操作

activity流程操作Activity是Android应用程序中的一个重要组件,它负责管理用户界面和用户交互。
在Android开发中,我们经常需要对Activity进行流程操作,以实现不同的功能和交互效果。
本文将介绍一些常见的Activity流程操作,帮助开发者更好地理解和使用Activity组件。
1. 启动Activity启动Activity是Android应用程序中最基本的操作之一。
我们可以通过Intent对象来启动一个新的Activity,并传递数据给新的Activity。
例如,我们可以通过以下代码启动一个新的Activity:```javaIntent intent = new Intent(this, SecondActivity.class);intent.putExtra("key", "value");startActivity(intent);```在新的Activity中,我们可以通过getIntent()方法获取传递过来的数据,并进行相应的处理。
2. 生命周期管理Activity有多个生命周期方法,如onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()等。
我们可以通过这些生命周期方法来管理Activity的状态和行为。
例如,我们可以在onCreate()方法中进行初始化操作,在onResume()方法中进行界面更新操作,在onPause()方法中保存数据等。
3. 返回数据在Activity之间进行数据交换是常见的操作。
我们可以通过startActivityForResult()方法启动一个新的Activity,并在新的Activity中通过setResult()方法返回数据给上一个Activity。
例如,我们可以通过以下代码启动一个新的Activity并获取返回数据:```javaIntent intent = new Intent(this, SecondActivity.class);startActivityForResult(intent, REQUEST_CODE);```在新的Activity中,我们可以通过以下代码返回数据给上一个Activity:```javaIntent intent = new Intent();intent.putExtra("result", "data");setResult(RESULT_OK, intent);finish();```在上一个Activity中,我们可以通过onActivityResult()方法获取返回的数据,并进行相应的处理。
[Android教程_兄弟连马剑威]_029_Activity组件
![[Android教程_兄弟连马剑威]_029_Activity组件](https://img.taocdn.com/s3/m/54d3f178a417866fb94a8e09.png)
1、Activity简介
• 四大组件之一的Activity组件,在应用中一个Activity可以用来表示一个界面,中文意思也可以理解为“活动”, 即一个活动开始,代表Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个android应用必须 通过Activity来运行和启动,和J2ME 的MIDlet 一样,在android 中,Activity 的生命周期交给系统统一管理。与 MIDlet 不同的是安装在android 中的所有的Activity 都是平等的。
• 通常情况下会发生这样的问题,我们在编辑短信的同时有电话打进来,那么接电话肯定是要启动另一个 Activiy,那么当前编辑短信的Activity所编辑的信息我们想暂时保存下来,等接完电话后回到该Activity时,可 以继续编辑短信。该功能需要如何去实现呢?
• SharedPreferences 使用xml 格式为Android 应用提供一种永久的数据存贮方式。对于一个Android 应用,它存 贮在文件系统的/data/ data/your_app_package_name/shared_prefs/目录下,可以被处在同一个应用中的所有 Activity 访问。Android 提供了相关的API 来处理这些数据而不需要程序员直接操作这些文件或者考虑数据同步 问题。
• 以窗口形式显示Activity • <activity android:name="SecondMyActivity" • android:theme="@android:style/Theme.Dialog"> • </activity>
7、 Activity通过Shared Preferences保存数据
Android应用开发从入门到精通

Android应用开发从入门到精通第一章:介绍Android应用开发的基础概念Android应用开发是指基于Android操作系统平台开发的移动应用程序。
Android是一个基于Linux的开放源代码平台,它提供了强大的开发工具和丰富的API(应用程序接口),使开发者能够创建各种各样的应用程序,包括游戏、社交媒体、电子商务和工具类应用等。
Android应用开发的核心概念包括Activity、Fragment、布局文件、资源文件、Intent等。
Activity是Android应用的主要组件,每个Activity代表了应用的一个界面。
Fragment是一个可重用的界面组件,可以在Activity中动态加载和替换。
布局文件定义了Activity或Fragment中的界面元素的排列方式,可以使用XML语言编写。
资源文件包括图片、字符串、颜色等,用于应用的各种资源的管理。
Intent用于在不同的组件之间进行通信和传递数据。
第二章:Android应用开发环境的搭建要进行Android应用开发,需要搭建相应的开发环境。
首先,需要下载并安装Java Development Kit(JDK),然后下载并安装Android Studio,它是官方推荐的Android开发工具。
安装完Android Studio后,需要配置Android SDK(软件开发工具包)。
Android SDK包含了众多的开发工具和API,可以满足不同应用的需求。
配置SDK的过程通常包括选择需要安装的组件和设置相应的环境变量。
安装完成后,就可以开始进行Android应用的开发了。
第三章:Android应用的UI设计用户界面(UI)是Android应用的重要组成部分,好的UI设计能够提高用户体验。
Android提供了丰富的UI元素和布局管理器,开发者可以根据应用的需求自由选择和设计UI。
常用的UI元素包括文本框、按钮、图像视图、列表视图等。
Android提供了一套用于绘制和交互的UI组件,开发者可以通过XML文件或者代码方式来创建UI界面。
Android 活动(Activity)

Android 活动(Activity) | 菜鸟教程
Android 活动(Activity)
活动代表了一个具有用户界面的单一屏幕,如 Java 的窗口或者帧。
Android 的活动是 ContextThemeWrapper 类的子类。
如果你曾经用 C,C++ 或者 Java 语言编程,你应该知道这些程序从 main() 函数开始。
很类似的,Android 系统初始化它的程序是通过活动中的 onCreate() 回调的调用开始的。
存在有一序列的回调方法来启动一个活动,同时有一序列的方法来关闭活动,如下面的活动声明周期图所示:
Activity 类定义了下面的回调。
你可以不用实现所有的回调方法。
但了解其中的每一个非常的重要,实现这些可以保证你的应用行为如用户所期望的那样。
回调描述
onCreate()这是第一个回调,在活动第一次创建时调用
onStart()这个回调在活动为用户可见时被调用
目中的活动文件,并从工具栏点击运行图标。
模拟器上的红色按钮,它将在
模拟器上的菜单按钮,它将在
模拟器上的返回按钮,它将在。
android activity构造方法

android activity构造方法Android Activity 构造方法Android Activity 是 Android 开发中的一个重要组件,它是用户与应用程序进行交互的窗口。
在Android 开发中,Activity 的构造方法是一个非常重要的部分,它用于初始化Activity 实例并设置相关属性。
本文将深入探讨Android Activity 构造方法的使用和注意事项。
一、构造方法的作用和基本用法Activity 的构造方法是用来创建 Activity 实例的。
在 Android 中,当我们启动一个新的Activity 时,系统会调用其构造方法来创建该Activity 的实例。
构造方法通常用于初始化Activity 的状态和设置一些必要的属性。
在构造方法中,我们可以进行一些初始化操作,如设置布局、获取 Intent 传递的数据等。
在Android 中,Activity 的构造方法是由系统自动调用的,我们无需手动调用。
在 Activity 的生命周期中,构造方法是在 onCreate() 方法之前被调用的。
二、构造方法的参数Activity 的构造方法有多个重载形式,可以接受不同类型的参数。
其中,最常用的构造方法是接受一个Bundle 类型参数的构造方法。
Bundle 是一个用于存储数据的容器,可以用来传递数据给新创建的Activity。
除了Bundle 参数,还有一些其他的构造方法可以接受不同类型的参数,如 Context、Intent 等。
这些参数用于初始化 Activity 实例时提供必要的上下文信息。
根据具体的需求,我们可以选择合适的构造方法来创建 Activity 实例。
三、构造方法的调用时机Activity 的构造方法是在系统创建Activity 实例时被调用的。
当我们启动一个新的Activity 时,系统会根据Manifest 文件中的配置信息来创建该 Activity 的实例。
android五大组件详解
初识Android上层应用5大基本组件收藏5 Basic Components1. Activity2. Service3. Broadcast Receiver4. Content Provider5. IntentActivity ——应用表示层(基类Activity)应用程序中的每个屏幕都是通过继承和扩展基类Activity来实现的。
同一应用中的每个Activity是相互独立的。
程序启动后显示的第一幅画面是应用程序的第一个Activity(默认窗口),而后可以根据需要从这个Activity启动另一个新的Activity。
Activity利用View来实现应用中的GUI(用户直接通过GUI和应用程序做交互)。
Activity窗口内的可见内容通过基类View提供。
使用Activity.setContentView()方法设置当前Activity中的View对象。
●每个View对象控制着窗口内的一个矩形空间;●View是一种层次化结构,Parent View中的布局属性会被子View继承;●位于View层次关系最底层的子View对象所代表的矩形空间就是跟用户进行交互的地方Activity状态回调:●onCreate●onStart●onRestart●onResume●onPause●onStop●onDestroyService——没有可见的用户界面,但能够长时间运行于后台(基类Service)运行于应用程序进程的主线程中,因此Service不会阻塞其他组件和用户界面。
Service是不能自己启动的,必须通过Context对象(如一个Activity)调用startService 或bindService方法来启动(用这两种方法启动的Service的生命周期不同)。
1. 调用startService方法a) 若Service没有启动,则首先会调用该Service的onCreate方法,然后再调用onStart方法。
四大组件的使用流程
四大组件的使用流程1. ActivityActivity 是 Android 应用程序的界面展示层。
当用户与应用程序进行交互时,Activity 负责处理用户的输入和展示应用程序的界面。
下面是使用Activity 的流程:•创建一个新的 Activity:–在 AndroidManifest.xml 文件中注册 Activity。
–在 Java 代码中创建一个新的类,并继承自 Activity 类。
–在 Activity 的布局文件中定义界面的组件。
•在 Activity 生命周期中处理事件:–在onCreate()方法中初始化界面布局和数据。
–在onStart()方法中连接服务或注册广播接收器。
–在onResume()方法中处理界面展示和用户交互的逻辑。
–在onPause()方法中暂停后台任务和保存临时数据。
–在onStop()方法中释放资源和停止网络请求。
–在onDestroy()方法中销毁界面并释放内存。
2. ServiceService 是 Android 应用程序的后台运行组件。
它可以在后台执行长时间运行的任务或与其他组件进行通信。
以下是使用 Service 的流程:•创建一个新的 Service:–在 AndroidManifest.xml 文件中注册 Service。
–在 Java 代码中创建一个新的类,并继承自 Service 类。
•在 Service 生命周期中处理事件:–在onCreate()方法中初始化服务的资源和数据。
–在onStartCommand()方法中执行后台任务逻辑。
–在onBind()方法中实现与其他组件的通信。
–在onDestroy()方法中释放资源和停止任务。
3. Broadcast ReceiverBroadcast Receiver 是 Android 应用程序的消息接收器。
它可以接收系统广播以及应用程序内部的自定义广播,并执行相应的操作。
以下是使用 Broadcast Receiver 的流程:•创建一个新的 Broadcast Receiver:–在 AndroidManifest.xml 文件中注册 Receiver。
Android四大组件之Activity详解
Android四⼤组件之Activity详解.Activity的本质Activity是Android提供的四⼤组件之⼀,是进⾏Android开发必不可少的组件.Activity是⼀个界⾯的载体,可以把它与html页⾯进⾏类⽐,html页⾯由各种各样的标签组成,⽽Activity则可以由各种控件组成.然⽽Activity也并不是那么简单.查看Activity类的源码我们就可以看到,这个类⼤概有六千多⾏代码,说明Android对Activity的处理是相当复杂的.不过我们平时进⾏开发的时候不需要了解到那么深⼊的地步,因为我们可以根据Activity中提供的⽅法快速的开发,Activity⽣命周期中涉及到七个回调⽅法..Activity的⽣命周期Android官⽅⽂档给出的Activity⽣命周期图当打开⼀个Activity的时候,会调⽤这个Activity的onCreate()⽅法,接着调⽤onStart()⽅法,然后调⽤onResume()⽅法.当onStart()⽅法执⾏之后,我们就可以看到这个Activity界⾯了.下⾯通过代码对单个Activity⽣命周期做进⼀步的解释.MainActivity.javapackage com.example.caobotao.activitylifecircle;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Log.i("info","MainActivity onCreate()");}@Overrideprotected void onStart() {super.onStart();Log.i("info","MainActivity onStart()");}@Overrideprotected void onResume() {super.onResume();Log.i("info","MainActivity onResume()");}@Overrideprotected void onPause() {super.onPause();Log.i("info", "MainActivity onPause()");}@Overrideprotected void onStop() {super.onStop();Log.i("info", "MainActivity onStop()");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("info","MainActivity onDestroy()");}@Overrideprotected void onRestart() {super.onRestart();Log.i("info","MainActivity onRestart()");}}View Code运⾏项⽬后,Logcat输出:11-2420:00:49.16020104-20104/com.example.caobotao.activitylifecircle I/info: MainActivity onCreate()11-2420:00:49.17020104-20104/com.example.caobotao.activitylifecircle I/info: MainActivity onStart()11-2420:00:49.17020104-20104/com.example.caobotao.activitylifecircle I/info: MainActivity onResume()点击返回键,Logcat输出:11-2420:05:15.37020104-20104/com.example.caobotao.activitylifecircle I/info: MainActivity onStop()11-2420:05:15.37020104-20104/com.example.caobotao.activitylifecircle I/info: MainActivity onDestroy()下⾯简单讲⼀下Activity⽣命周期中每个函数的作⽤:onCreate() :当Activity第⼀次被创建的时候调⽤此⽅法.⼀般在此⽅法中进⾏控件的声明,添加事件等初始化⼯作.onStart():当Activity被显⽰到屏幕上的时候调⽤此⽅法.onResume():当此Activity能够被操作之前,也就是能够获得⽤户的焦点之前调⽤此⽅法.onRestart():当Activity被停⽌后⼜被再次启动之前调⽤此⽅法.接着将调⽤onStart()⽅法.onPause():当第⼀个Activity通过Intent启动第⼆个Activity的时候,将调⽤第⼀个Activity的onPause()⽅法.然后调⽤第⼆个Activity的onCreate(),onStart(),onResume()⽅法,接着调⽤第⼀个Activity的onStop()⽅法.如果Activity重新获得焦点,则将调⽤onResume()⽅法;如果此Activity进⼊⽤户不可见状态,那么将调⽤onStop()⽅法.onStop():当第⼀个Activity被第⼆个Activity完全覆盖,或者被销毁的时候回调⽤此⽅法.如果此Activity还会与⽤户进⾏交互,将调⽤onRestart⽅法();如果此Activity 将被销毁,那么将调⽤onDestroy()⽅法.onDestroy():Activity被销毁之前调⽤此⽅法.或者是调⽤finish()⽅法结束Activity的时候调⽤此⽅法.可以在此⽅法中进⾏收尾⼯作,⽐如释放资源等.(注意:重写某个Activity的这些回调⽅法的时候需要⾸先在第⼀⾏调⽤基类Activity的相应的回调⽅法.⽐如super.onCreate(),super.onStart()等等.)接下来了解⼀下多个Activity交互中的⽣命周期.在第⼀个Activity中添加⼀个按钮,⽤于启动第⼆个Activity.AActivity.javapackage com.example.caobotao.activitylifecircle;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;public class AActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Log.i("info","AActivity onCreate()");findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(AActivity.this,BActivity.class));}});}@Overrideprotected void onStart() {super.onStart();Log.i("info","AActivity onStart()");}@Overrideprotected void onResume() {super.onResume();Log.i("info","AActivity onResume()");}@Overrideprotected void onPause() {super.onPause();Log.i("info", "AActivity onPause()");}@Overrideprotected void onStop() {super.onStop();Log.i("info", "AActivity onStop()");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("info","AActivity onDestroy()");}@Overrideprotected void onRestart() {super.onRestart();Log.i("info","AActivity onRestart()");}}View CodeBActivity.javapackage com.example.caobotao.activitylifecircle; import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;public class BActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_baty);Log.i("info","BActivity oncreate()");}@Overrideprotected void onStart() {super.onStart();Log.i("info","BActivity onStart()");}@Overrideprotected void onResume() {super.onResume();Log.i("info","BActivity onResume()");}@Overrideprotected void onStop() {super.onStop();Log.i("info","BActivity onStop()");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("info", "BActivity onDestroy()");}@Overrideprotected void onRestart() {super.onRestart();Log.i("info","BActivity onRestart()");}}View Code运⾏项⽬后,Logcat输出:11-2621:14:38.9606208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onCreate()11-2621:14:38.9706208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onStart()11-2621:14:38.9706208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onResume()点击按钮打开BActivity后,Logcat输出:11-2621:14:42.0506208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onPause()11-2621:14:42.0806208-6208/com.example.caobotao.activitylifecircle I/info: BActivity oncreate()11-2621:14:42.0906208-6208/com.example.caobotao.activitylifecircle I/info: BActivity onstart()11-2621:14:42.0906208-6208/com.example.caobotao.activitylifecircle I/info: BActivity onresume()11-2621:14:45.7506208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onstop()然后点击BACK键,Logcat输出:11-2621:20:38.6506208-6208/com.example.caobotao.activitylifecircle I/info: BActivity onPause() 11-2621:20:38.9706208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onRestart()11-2621:20:38.9706208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onStart()11-2621:20:38.9706208-6208/com.example.caobotao.activitylifecircle I/info: AActivity onResume()11-2621:20:41.7106208-6208/com.example.caobotao.activitylifecircle I/info: BActivity onStop()11-2621:20:41.7106208-6208/com.example.caobotao.activitylifecircle I/info: BActivity onDestroy()可以看出,当启动第⼆个Activity时,总是先调⽤第⼀个Activity的onPause()⽅法,然后如果第⼆个Activity是第⼀次创建的话,则再调⽤第⼆个Activity的onCreate()⽅法,否则调⽤第⼆个Activity的onRestart()⽅法,接着调⽤onStart(),onResume()⽅法..Activity⽣命周期交互设计思想到这⾥,⼤家可能会有些疑问,⾕歌为什么要这样设计呢?如:1.当从第⼀个Activity启动第⼆个Activity的时候,为什么先调⽤第⼀个Activity的onPause()⽅法,然后再调⽤第⼆个Activity的onCreate()等⽅法呢?解释:假如有这样⼀个情况,你正在使⽤APP听⾳乐,突然来了⼀个电话,那么当然需要先暂停⾳乐,然后进⾏电话的处理。
详解Android的Activity组件
详解 Android 的 Activity 组件创建时间:2010年10月13日(星期三) 下午4:12 | 分类:android | 字数:9887 | 发送到我的Qzone | 另存为... | 打印详解Android 的Activity 组件级别: 初级 张 勇, Android 软件工程师, 重庆索伦互联网信息服务有限公司2010 年 1 月 22 日 本文详细介绍了 Android 应用编程中 Activity 的生命周期、通信方式和 Intent Filter 等内容,并提供了一些日常开发中经常用到的关于 Activity 的技巧和方法。
通过本文,你可以进一步了接 Android 中 Activity 的运作方式。
详解 Android 的 Activity 组件Activity 的生命周期和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理。
与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的。
Activity 的状态及状态间的转换在 android 中,Activity 拥有四种基本状态:1. Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
2. Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。
此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3. Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped 状态。
4. Killed Activity 被系统杀死回收或者没有被启动时处于 Killed 状态。
当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Activity属性
• taskAffinity(任务亲和力) • launchMode
– standard、singleTop、singleTask、singleInstance
• allowTaskReparenting
条件
操作步骤
清空栈
• 默认情况:
– 当用户长时间离开task(当前task被转移到后台)时,系统会清除task中 栈底activity外的所有activity。这样,当用户返回到task时,只留下那个 task最初始的根activity了
•
alwaysRetainTaskState属性
– 如果栈底activity的这个属性被设置为true,默认的情况就不会发生。task 中的所有activity将被长时间保存。
常见Intent标志
• FLAG_ACTIVITY_NEW_TASK
要求目标Activity创建新的实例并作为新的任务来处理
• FLAG_ACTIVITY_CLEAR_TOP
目标activity以上的activity被清除,目标activity则位于顶端
• FLAG_ACTIVITY_RESET_TASK_IF_NEED ED • FLAG_ACTIVITY_SINGLE_TOP
条件
1)启动应用,从First->Second->Third 2)按Home键 3)“程序管理器”重新启动Application,观察哪个Activity位于栈顶 4)按“BACK”键,观察任务栈情况
操作步骤
验证场景三
• Activity属性--finishOnTaskLaunch
Application:三个Activity:First、Second、Third,其中First启 动Second,Second启动Third 包名:com.great Second的Activity属性finishOnTaskLaunch设置为true 1)启动应用,从First->Second->Third 2)按Home键 3)“程序管理器”重新启动Application,观察哪个Activity位于栈顶 4)按“BACK”键,观察任务栈情况
操作步骤
验证场景二
• Activity属性--clearTaskOnLaunch
Application中三个Activity:First、Second、Third,其中First启动 Second,Second启动Third First的Activity属性clearTaskOnLaunch设置为true
single Top 同standard
同standard
允许
single将activity2放到 Task task1栈底
single Insta 同singleTask nce
允 许。singleTask模式的activity总是位 不能有多个实例。由于于栈底位置。目标activity实例已存在时, 该模式下activity总是 如果该实例刚好位于task栈顶,则接收 位于栈顶,所以actvityintent,否则到来的intent将会被丢弃,但 在同一个设备里至多只该可以响应该intent的那个activity所在的 有一个实例 task将会被移到前台。(onNewIntent被 调用) 不允许与其它activity共存于一个task。 同singleTask 如果activity1的运行在该模式下,则 activity2一定与activity1位于不同的task
验证场景一
• Intent Flag:FLAG_ACTIVITY_CLEAR_TOP
条件
Application:三个Activity:First、Second、Third,其中First启动 Second,Second启动Third 包名:com.great 1)启动应用,从First->Second->Third 2)使用am发出intent,目标Activity:Third; am start –n com.great/com.great.Third 3)使用am发出带FLAG_ACTIVITY_CLEAR_TOP的标志Intent,目标 Activity:Second 4)使用back键,观察界面 验证任务栈的情况
– 应用程序图标
Activity与进程关系
• 不同APK共享userId • 不同APK,不同包名
• 相同APK,相同包名,Activity在不同的进 程内运行 • 相同APK,不同包名
ActivityManager
• Activity的管理器,通过它可以得到Activity 运行的相关环境
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
Application1:三个Activity:First、Second、Third 包名:com.great.act Application2:一个Activity:MyActivity 包名:com.great.other 设置Second的Activity属性: taskAffinity="com.great.infinity“ 设置MyActivity的Activity属性: taskAffinity="com.great.infinity“ First到Second是通过Intent调用,该Intent含有 FLAG_ACTIVITY_NEW_TASK标志 1)运行Application2,MyActivity 2)“HOME”键,运行Application1,First->Second 3)连续“BACK”键观察界面现象
• List<RunningAppProcessInfo> getRunningAppProcesses() •List<RunningTaskInfo> getRunningTasks(int maxNum) •MemoryInfo[] getProcessMemoryInfo(int[] pid) •List<RunningServiceInfo> getRunningServices(int maxNum) •killBackgroundProcesses(String packagename)
验证场景
请学员自行设计场景,进行验证
问题讨论:
• 从“程序启动器”启动,如何保证程序第 一个界面必然是登录界面?
• 如何保证我们的应用程序即任务被送入后 台时或任务栈所有Activity都destroy时,系 统会提示“是否退出程序”?
其他的Activity重要属性
•
•
• • • •
enabled =[true"| "false"] – 是否允许被实例化 exported=["true"|"false"] – 是否允许其他应用程序调用 Process= "string" – 以“:”开头,让Activity运行在不同的进程中 Permission="string" noHistory=[true"|"false"] – 是否存入Activity栈 Icon=“Drawableresource”
activity是否允许 其它activity共存于task
对于新的intent, 是否总是实例化activity对 象 是的。当接收到新的intent 时,总是会生成新的activity 对象。
已存在的activity对象,如果
位于目标task的栈顶,则该 activity被重用,如果它不位 于栈顶,则会实例化新的 activity对象
• finishOnTaskLaunch
– 在任务被重新装载后,目标activity被释放
LaunchMode
从Activity1跳转到Activity2,Activity2启动模式:
模式\ 包容activity2的 一个activity是否允许 分类 task 有多个实例
如果不包含 FLAG_ACTIVITY_可被多次实例化,同一 standNEW_TASK标记, 个task的不同的实例可 位于不同的task中,每允许 ard 则activity2放入 个task也可包含多个实 task1,否则为 例 activity2选择task
•
clearTaskOnLaunch属性
– 如果任务的根activity的这个属性设置成了”true“,那么只要用户离开了 任务并返回,就会清除除了根activity之外的所有activity。换句话说,它 和alwaysRetainTaskState正好相反,当用户返回到任务时,总是恢复到 最初的状态,不管离开了多长时间。
条件
操作步骤
验证场景六
• Activity属性:taskInfinity 和LaunchMode:SingleTask
Application:三个Activity:First、Second、Third 包名:com.great.act First:taskInfinity=“com.great.infinity” launchMode=“singleTask” 重写onNewIntent方法 1)运行Application First->Second->Third 2)“home”键(让任务栈回到后台) 3)“程序管理器”,重新运行Application(即发出了launch First的 Intent) 4)观察界面显示,并观察onNewIntent的执行 5)“back”键,观察界面显示 再次的验证: 取消First的Activity属性设置 把Second的Activity属性设置成First相同的,并重写onNewIntent方法 操作步骤相同,请观察现象