Android Activity组件及其生命周期

时间:2022-06-29 17:57:45

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() 方法或者系统决定停止该活动以释放资源。

Android Activity组件及其生命周期

 Android Activity组件及其生命周期

 

 

 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传递数据。

Android Activity组件及其生命周期Android 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();
                }
            }
        });

    }
}
View Code Android Activity组件及其生命周期Android Activity组件及其生命周期
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);
    }
}
View Code

 调用另一个Activity并返回结果

实例:选择头像功能。

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

Android Activity组件及其生命周期Android 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();
            }
        });
    }
}
View Code

 接下来引入Fragment

Fragment介绍

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

Fragment生命周期:

Android Activity组件及其生命周期

在Activity中添加Fragment

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

2、当Activity运行时添加。