1、活动的生命周期

1.1、返回栈

Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈。栈是一种先进后出的数据结构,在默认情况下,每当我们启动了一个新的活动,他会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动就会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

1.2.活动状态

每个活动在其生命周期中最多可能有四种状态

(1)运行状态

(2)暂停状态

当一个活动不在处于栈顶位置,但仍然可见时,这是活动就进入了暂停状态。处于暂停状态的活动仍是完全存活的。

(3)停止状态

(4)销毁状态

1.3.活动的生命周期

Activity类中定义了七个回调的方法,覆盖了活动生命周期的每一个环节。

(1)onCreate(),他会在活动第一次被创建的时候调用,应在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。

(2)onStart()这个方法在活动由不可见变为可见的时候调用

(3)onResume()这个方法在活动准备好和用户进行交互的时候调用。此是活动一定处于返回栈的栈顶,并且处于运行状态,在屏幕的最前端。

(4)onPause()当Activity被一个透明挥着Dialog样式的Activity覆盖时的状态。此时它仍与床就管理器保持连接,系统继续维护其内部状态,所以他仍然可见,但他已失去了焦点古不可以用户交互。

(5)onStop()这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新活动是一个对话框是的活动,那么onPause()方法会得到执行,而onStop()方法不会执行。

(6)onDestroy()这个方法在活动被销毁之前调用,直呼的状态将变为销毁状态。

(7)onRestart()这个方法再哄活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

1.4 三种生存期

以上七个方法除了onRestart(),其他都是两两相对的,从而又可将活动分为三种生存期。

1.4.1完整生存期onCreate()和onDestroy()之间

1.4.2.可见生存期onStart()和onStop()之间

1.4.3.前台生存期onResume()和onPause()之间。

1.5Activity的启动顺序

onCreate()-->onStart()-->onResume()

当另一个Activity启动时:

第一个Activity  onPause()-->第二个Activity onStart()-->onResume()-->第一个Activity onStop()

当返回到第一个Activity时

第二个Activity onPause()-->第一个onRestart()-->onStart()-->onResume()-->第二个Activity onStop()-->onDestroy()

一个Activity的销毁顺序

(1)onPause()--><Process Killed>

(2)onPause()-->onStop()--><Process Killed>

(3)onPause()-->onStop()-->onDestroy()

2、Activity传递数据

两种方式:

2.1直接通过Bundle对象传递

1.传递:

Intent intent = new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putBoolean("boolean_key",true);//编写内容
bundle.putString("string_key","valueaaa);
intent.putExtra("key",bundle);//封装
startActivity(intent);//启动

获取数据:

Intent intent = getIntent();
//注意:这里的intent和MainActivity中的intent不是一个,但他们所携带的内容是一样的
Bundle bundle = intent.getBundleExtra("key");
String info = bundle.getString("string_key");

2.2直接通过Intent传递

Intent intent = new Intent(MainActivity.this,OtherActivity.class);
intent.putExtraBoolean("boolean_key",true);//编写内容
intent.putExtraString("string_key","valueaaa);
intent.putExtraInt("age",24);
startActivity(intent);//启动

获取:

Intent intent = getIntent();
//注意:这里的intent和MainActivity中的intent不是一个,但他们所携带的内容是一样的
String info = intent.getString("string_key");
int age = intent.getInt("age",20);

3.Activity处理返回结果

Android提供了一个机制,跳转到其他Activity是,再返回们可以接收到其他activity返回的值,无需再start新的当前activity。

//启动待带回结果的Activity
startActivityForResult(intent,0);
//处理返回结果的方法
public void onActivityResult(int requestCode,int resultCode,Intent data) //设置结果,结束Activity
MyActivity3.this.setResult(0,intent);
MyActivity3.this.finish();

示例:

点击MainActivity中的select按钮,跳转到PhoneNumberListActivity,选择列表中的数据,把值传回MainActivity中。

MainActivity

//select点击事件
public void Select(View v) {
Intent intent = new Intent(this, PhoneNumberListActivity.class);
//intent,请求编码
startActivityForResult(intent, REQUESTCODE_1);
} //重写方法来处理返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 1:
etNum.setText(data.getStringExtra("number")); }
}
}
PhoneNumberListActivity:
public class PhoneNumberListActivity extends AppCompatActivity {

    private ListView lvPhone;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_number_list);
lvPhone = (ListView) findViewById(R.id.lvPhone);
final String[] numbers = {"1", "2", "3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_1, android.R.id.text1, numbers);
lvPhone.setAdapter(adapter);
lvPhone.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String number = numbers[i];
Intent intent = new Intent();
intent.putExtra("number", number);//设置返回结果
setResult(RESULT_OK, intent);
finish();
}
});
}
}

4.横竖屏

Android内设置了方向感应器的支持,Android会根据所处的方向进行横竖屏切换,但是有时我们的应用程序仅能在横屏或者书评运行,比如某些游戏,此时我们需要锁定该Activity运行时的屏幕方向,<activity>节点的android:screenOrentation属性可以完成该项任务,示例代码如下:

<activity android:name=".Demo"
android:screenOrientation="portrait"/>
//竖屏,值为landscape时为横屏
//        通过代码动态设置横竖屏
// 横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 竖屏
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//        全屏的Activity:要使一个Activity全屏运行,可以在其onCreate()方法中添加如下代码实现
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//去除标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//        以窗口形式显示Activity
<activity android:name=".RecyclerActivity"
android:theme="@android:style/Theme.Dialog"/>

5、Activity运行时屏幕方向与显示方式

Activity横竖屏切换时

/**
* 可以通过AndroidManifest.xml中的android:configChages指定的属性发生变化时,不会去重新启动Activity,
* 而是通知程序去调用onConfigurationChanged()函数
* 常见的属性有:
* keyboard 键盘发生了改变 -- 例如用户用了外部的键盘
* keyboardHidden 键盘的可用性发生了改变
* orientation 屏幕方向改变了
* screenSize 屏幕大小改变了
*/

6、Activity通过SharedPreference保存数据

SharePreference使用xml格式为Android应用提供一种永久的数据存储方式。对于一个Android应用,它存储在文件系统的/data/data/your_app_package_name/shared_pres/目录下,可以被处在同一用用中的所有Activity访问

    private SharedPreferences sp ;

        //获取当前应用程序的SharePreferences对象,只有一个
sp = getSharedPreferences("msg",Context.MODE_PRIVATE); //存储数据
SharedPreferences.Editor editor = sp.edit();
editor.putString("msg","aaaa0");
//提交
editor.commit(); //移除msg内容(删除数据,文件还有)
editor.remove("msg");
editor.commit(); //获取数据
String s = sp.getString("msg","");

Activity 详解的更多相关文章

  1. Xamarin android 之Activity详解

    序言: 上篇大概的讲解了新建一个android的流程.今天为大家带来的是Activity详解,因为自己在开发过程中就遇到 好几次坑,尴尬. 生命周期 和Java里头一样一样的,如图 图片来源于网上哈, ...

  2. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  3. [安卓基础] 009.组件Activity详解

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. Activity详解生命周期(Android)

    Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之 ...

  5. Activity详解四 activity四种加载模式

    先看效果图: 1概述 Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据实际的需求为Activity设置对应的 ...

  6. Activity详解三 启动activity并返回结果

    首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...

  7. Activity详解二 activity数据传递

    首先看效果图: 1.Bundle类的作用 Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值.相对于Map,它提供了各种常用类型的putXxx()/getXxx()方 ...

  8. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  9. 安卓开发之activity详解(sumzom)

    app中,一个activity通常是指的一个单独的屏幕,相当于网站里面的一个网页,它是对用户可见的,它上面可以显示一些控件,并且可以监听处理用户的时间做出响应. 那么activity之间如何进行通信呢 ...

  10. Android四大组件之Activity详解——传值和获取结果

    废话不多说,先来看效果图 项目源码: http://download.csdn.net/detail/ginodung/8331535 程序说明: 在MainActivity中输入用户名和密码,然后提 ...

随机推荐

  1. 使用Netty和动态代理实现一个简单的RPC

    RPC(remote procedure call)远程过程调用 RPC是为了在分布式应用中,两台主机的Java进程进行通信,当A主机调用B主机的方法时,过程简洁,就像是调用自己进程里的方法一样.RP ...

  2. prometheus(4)之alertmanager报警插件

    报警处理流程如下: 1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过Promethes配置的'scrape_interval'定义的时间间隔,定期采集目 ...

  3. Linux基本命令学习-文件基本操作1

    关机重启 shutdown -h now #立即关机 shutdown -h 5 # 5秒后关机 #重启 shutdown -r now #立即重启 reboot halt #重启 文件相关 系统目录 ...

  4. loadruuner12基准测试流程

    基准测试:单用户测试 一.归纳基准测试: 方法一:单用户循环5次 1.调试好脚本(加检查点,在VuGen中运行成功) 2.打开控制台,设置Run-time Settings 3.迭代次数:5 4.Pa ...

  5. 运行级别和找回root密码

    运行级别说明 0 :关机 1 :单用户 [类似安全模式,这个模式可以帮助找回root密码 2:多用户状态没有网络服务 3:多用户状态有网络服务 [使用] 4:系统未使用保留给用户 5:图形界面 6:系 ...

  6. yum install hadoop related client

    yum list avaliable hadoop\* yum list installed yum repolist repo is in /etc/yum.repos.d yum install ...

  7. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder,阿里MAVEN仓库地址更新为了https问题

    http://maven.aliyun.com/nexus/content/groups/public/,仓库地址更新为了https,所以下载时需要ssl认证,我们可以忽略ssl检查导致的问题,我们可 ...

  8. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  9. [cf1083F]The Fair Nut and Amusing Xor

    令$c_{i}=a_{i}\oplus b_{i}$,那么也就是要对$c_{i}$执行操作使其变为0 显然有一个贪心的策略,即从左往右,若当前$c_{i}\ne 0$,则执行对$[i,i+k)$异或$ ...

  10. [luogu5665]划分

    暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$(然后可以各种优化到$o(n^2)$,但这不需要)输出f[i][j], ...