Android Activity组件及其生命周期

Activity是什么?

Activity 是用户接口程序,几乎所有的 Activity 都要和用户打交道。

每个 Activity 都提供一个用户界面窗口,一般情况下,该界面窗口会填满整个屏幕,但是也可以比屏幕小,或者浮在其他的窗口之上。

Activity的四种状态,运行状态,暂停状态,停止状态,销毁状态。

Activity的生命周期

名称 调用时间
onCreate(Bundle savedInstanceState) 创建 Activity 时调用。

设置在该方法中,还以 Bundle 的形式提供对以前储存的任何状态的访问。其中参数 savedInstanceState 对象是用于保存 Activity 的对象的状态。

onStart() Activity 变为在屏幕上对用户可见时调用。
onResume() Activity 开始与用户交互时调用(无论是启动还是重启一个活动,该方法总是被调用)。
onPause() 当 Android 系统要激活其他 Activity 时,该方法被调用,暂停或收回 CPU 和其他资源时调用。
onStop() Activity 被停止并转为不可见阶段时调用。
onRestart() 重新启动已经停止的 Activity 时调用。
onDestroy() Activity 被完全从系统内存中移除时调用。

该方法被调用可能是因为有人直接调用 finish() 方法或者系统决定停止该活动以释放资源。

activity的创建,启动,关闭

1、创建

① 创建继承自Activity的Activity

② 重写需要回调的方法

③ 设置要显示的视图

但这些还不够,我们还要在AndroidManifest.xml文件中对建立的 Activity 进行注册,即在 <application> 标签下添加 <activity> 标签。

对于主 Activity(即入口Activity),还要为其添加 <intent-filter> 标签。(intent是很重要的概念,Activity通过Intent来表达自己的意图)

2、启动

Activity分为入口Activity和其他Activity,他们的启动方式是不同的。

对于入口Activity,只需在AndroidManifest.xml中配置即可。

对于其他Activity,可以添加按钮点击事件,进行跳转,跳转代码如下。

intent = new Intent(MainActivity.this, DemorActivity.class);
startActivity(intent);

3、关闭

在单击事件中添加 finish()方法即可。

对于其他Activity,关闭后返回上一个Activity,若是入口Activity,则会退出程序,返回主屏幕。

平常我们用到刷新功能,可用如下代码完成。

onCreat(null);

多个Activity的使用

Activity 数据传递共有三种:

  1. 通过 Intent 传递一些简单的数据。
  2. 通过 Bundle 传递相对复杂的数据或者对象。
  3. 通过 startActivityForResult 可以更方便地进行来回传递,当然前两种方法也可以来回传递。

通过bundle在两个Activity传递数据。

package com.example.project_1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //取值
                String site1 = ((EditText)findViewById(R.id.et_site1)).getText().toString();
                String site2 = ((EditText)findViewById(R.id.et_site2)).getText().toString();
                String site3 = ((EditText)findViewById(R.id.et_site3)).getText().toString();
                String name = ((EditText)findViewById(R.id.et_name)).getText().toString();
                String phone = ((EditText)findViewById(R.id.et_phone)).getText().toString();
                if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&!"".equals(phone)){
                    Intent intent = new Intent(MainActivity.this,AddressActivity.class);
                    //创建Bundle对象,保存输入的信息
                    Bundle bundle = new Bundle();
                    bundle.putCharSequence("name",name);
                    bundle.putCharSequence("phone",phone);
                    bundle.putCharSequence("site1",site1);
                    bundle.putCharSequence("site2",site2);
                    bundle.putCharSequence("site3",site3);
                    intent.putExtras(bundle);
                    startActivity(intent);//传递到AddressActivity中
                }else{
                    Toast.makeText(MainActivity.this,"请将收货地址填写完整",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

package com.example.project_1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class AddressActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_address);
        //接收传来的bundle值
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        String name = bundle.getString("name");
        String phone = bundle.getString("phone");
        String site = bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3");
        TextView tv_name = findViewById(R.id.name);
        TextView tv_phone = findViewById(R.id.phone);
        TextView tv_site = findViewById(R.id.address);
        //输出在xml文件中
        tv_name.setText("姓名:"+name);
        tv_phone.setText("电话:"+phone);
        tv_site.setText("地址:"+site);
    }
}

调用另一个Activity并返回结果

实例:选择头像功能。

(在当前Activity点击选择头像按钮,跳转到头像列表Activity,选好后退出该Activity,并将选择结果呈现在主Activity)

package com.example.project_1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class HeadActivity extends AppCompatActivity {
    //头像资源
    private int[] imageId = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head);
        GridView gridView = findViewById(R.id.grideview);
        BaseAdapter adapter = new BaseAdapter() {//重写监听器方法
            @Override
            public int getCount() {
                return imageId.length;
            }

            @Override
            public Object getItem(int position) {
                return position;
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                if(convertView==null){
                    imageView = new ImageView(HeadActivity.this);
                    imageView.setAdjustViewBounds(true);
                    imageView.setMaxHeight(150);
                    imageView.setMaxWidth(158);
                    imageView.setPadding(5,5,5,5);
                }else{
                    imageView = (ImageView)convertView;
                }
                imageView.setImageResource(imageId[position]);
                return imageView;
            }
        };
        gridView.setAdapter(adapter);
        //选项被点击的监听器
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = getIntent();
                Bundle bundle = new Bundle();
                bundle.putInt("imageId",imageId[position]);
                intent.putExtras(bundle);
                setResult(0x11,intent);
                finish();
            }
        });
    }
}

接下来引入Fragment

Fragment介绍

Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!

Fragment生命周期:

在Activity中添加Fragment

1、直接在布局文件中添加,用<Fragment></Fragment>组件完成。

2、当Activity运行时添加。

原文地址:https://www.cnblogs.com/dongao/p/12247541.html

时间: 2024-12-09 23:55:58

Android Activity组件及其生命周期的相关文章

Android四大组件的生命周期

介绍生命周期之前,先提一下任务的概念 任务其实就是activity 的栈它由一个或多个Activity组成的共同完成一个完整的用户体验, 换句话说任务就是" 应用程序" (可以是一个也可以是多个,比如假设你想让用户看到某个地方的街道地图.而已经存在一个具有此功能的activity 了,那么你的activity 所需要做的工作就是把请求信息放到一个Intent 对象里面,并把它传递给startActivity().于是地图浏览器就会显示那个地图.而当用户按下BACK 键的时候,你的act

Android Activity完整的生命周期深入理解

说到activity自身的生命周期 要区分几个概念 1 Activity 官方解释为 "An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the  phone, take a photo, send an email, or view a map. Each activity is g

Android Activity与Fragment生命周期 对应关系

android四大基础组件--Service生命周期详解

android四大基础组件--ServiceService 生命周期详解 1.Service的生命周期: I> 在非绑定Service情况下,只有oncreate(),onStartCommand(),onDestory()方法情况下:  操作方法对应生命周期一: a.[执行startService(Intent)] 执行生命周期方法:oncreate()--->onStartCommand(): b.[执行stopService(Intent)] 执行生命周期方法:onDestory();

Android中各组件的生命周期

1.Activity生命周期图 二.activity三种状态 (1)active:当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于活动状态,同一个时刻只会有一个Activity处于活动(Active). (2)paused:当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast.AlertDialog等弹出窗口时)它处于暂停状态.暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和

【Android开发-8】生命周期,Activity中打开另外一个Activity

前言:生命中有许多人陪伴自己走过一生中的某段旅程,只是有些人只是某阶段出现,有些人却陪伴自己很久.就像小学.中学.高中.大学,那些曾经以为会长久拥有的,当经历过天涯各地地忙碌于生活,或如意,或失意:渐渐地那些画面只剩回忆.天涯各自安命,能在一起的就尽力珍惜吧,不在一起地就衷心地祝福,我们都需要一种姿态生活下去!Android中的Activity的生命中,我们经常需要打开另外一个Activity,即另外一个界面.这个可能出现的时间很短暂,然后又回到主界面.但是这两个Activity都在各自的生命周

Android React Native组件的生命周期及回调函数

熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开发中,React Native组件的生命周期,大致分为三个阶段,分别是: 1.组件第一次绘制阶段,这个阶段主要是组件的加载和初始化: 2.组件在运行和交互阶段,这个阶段组件可以处理用户交互,或者接收事件更新界面: 3.组件卸载消亡的阶段,这个阶段主要是组件的清理工作. 在Android React

【Android开发-7】生命周期,Activity的生老病死

前言:生老病死,是每个人都要经历的事情.所以不必惊慌,静下心,想想自己在人生所处的每个阶段该做些什么,才能让自己的人生价值提高,或者说自身价值提高.在一个生命周期里,某个阶段该完成的事,没完成,也许就会影响到整个生命周期.所以有时候人生不能堕落,一堕落也许许多美好的事情就会错过了,等待你的就只有无声的忏悔! 对于Activity的生命周期的流程,最经典的一张图如下: 1.一个Activity A启动时,它会经历下面各个阶段: onCreate()-->onStart()-->onResume(

Android Small插件化框架解读——Activity注册和生命周期[阿里工程师分享]

通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特别是大部分知识都需要结合虚拟机和Androidframwork的原理才能慢慢理解.比如,文中作者提到了插件化框架要解决的三个核心问题: 1)插件类的加载: 2)插件资源的处理: 3)Activity注册和生命周期问题: 其中第3点作者是这样解释的,"大部分插件化框架解决办法都是采用在宿主工程里预先注