Activity的生命周期与跳转

一、项目整体说明

设计目标

1.实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2.在上一个项目的基础上,新建一个Activity1,实现Activity之间的跳转。
3.实现最新的Activityforresult功能,新建一个Activity2,在Activity1上收到activity2的回传值。

使用技术

1.Activity生命周期

1.1 onCreate()
在首次创建Activity时调用。系统向此方法传递一个Bundle对象,其中包含Activity的上一状态,之后会调用onStart方法。
1.2 onStart()
在Activity即将对用户可见之前调用。而后如果Activity转入了前台就会调用onResume方法。
1.3 onResume()
在Activity即将开始与用户进行交互之前调用。此时,Activity处于Activity堆栈的顶层,并具有用户输入焦点。当跳转另一个Activity,或者退出当前Activity后会调用onPause方法。
1.4 onPause()
在系统即将开始继续另一个Activity时调用,之后正常情况下会调用onStop方法。
1.5 onStop()
在Activity对用户不再可见时调用,之后如果Activity恢复与用户的交互,则会调用onRestart方法,如果Activity被销毁,则会调用onDestroy方法。
1.6 onRestart()
在Activity被停止后再次启动时调用,而后会调用onStart方法。
1.7 onDestroy()
在Activity被销毁前调用,这是Activity收到的最后调用。当Activity结束,或系统为节省空间而暂时销毁该Activity实例时,可能会调用它。

2.Intent启动Activity

在一个主界面通过Intent跳转到不同的Activity

3.Activityforresult

利用下一个activity给当前的activity传值

运行环境

计算机型号:小新 15IIL 2020
处理器:Intel® Core™ i7-1065G7 CPU @ 1.30GHz 1.50 GHz
机带RAM:8.00 GB (7.78 GB 可用)
操作系统:Windows 10 家庭中文版
编译器:Android Studio Dolphin | 2021.3.1

二、功能说明及代码解析

1.实现Activity之间的跳转

以聊天页面为例实现点击聊天框进入聊天页面

MainActivity2(聊天页面)

在java目录下新建一个Empty Activity组件命名为MainActivity2,使用自动生成的布局名称在这里插入图片描述在这里插入图片描述

activity_main2界面设计(layout文件)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity2">
    <TextView
        android:id="@+id/textView6"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textSize="30dp"
        android:background="#D0D0D0"
        android:textColor="@color/black"
        android:text="昵称" />
    <TextView
        android:id="@+id/textView7"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_vertical"
        android:background="@drawable/line"
        android:layout_weight="1"
        android:gravity="center"
        android:text="没有聊天记录"
        android:textSize="24dp" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/textView8"
            android:layout_width="326dp"
            android:layout_height="match_parent"
            android:background="@drawable/underline"
            android:paddingLeft="15dp"
            android:paddingTop="15dp"
            android:paddingRight="10dp"
            android:paddingBottom="10dp"
            android:text="请输入内容"
            android:textSize="25dp" />
        <Button
            android:id="@+id/btn_send"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#D0D0D0"
            android:text="发送"
            android:textColor="@color/white"
            android:textSize="24sp"
            tools:ignore="TextContrastCheck" />
    </LinearLayout>
</LinearLayout>

代码中使用到的边框文件设计如下:
在drawable中新建一个line.xml文件
在这里插入图片描述
在这里插入图片描述
相关代码

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 边框颜色值 -->
    <item>
        <shape>
            <solid android:color="@color/black" />
        </shape>
    </item>
    <!-- 主体背景颜色值 -->
    <item
        android:bottom="1dp"><!--设置只有底部和右边有边框-->
        <shape>
            <solid android:color="@color/white" />
        </shape>
    </item>
</layer-list>

设置完成后组件和效果图如下
在这里插入图片描述

相关java文件编写(RecyclerAdapter文件续写)

首先在MyViewHolder中新绑定item_dome中的LinearLayout控件,先定义控件及名称,后用findViewById()方法绑定,即添加下列语句

LinearLayout linearLayout;//定义控件
linearLayout = itemView.findViewById(R.id.linearLayout);//绑定控件

接下来在onBindViewHolder() 下为消息列表的单项绑定点击事件,实现跳转功能,即在之前项目的onBindViewHolder() 中添加如下内容

       holder.linearLayout.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context,MainActivity2.class);
                intent.putExtra("name",list.get(position).get("昵称").toString());
                context.startActivity(intent);
            }
        });

2.使用log展现生命周期的状态变化

相关代码编写

在MainActivity2的java文件中添加如下代码

    @Override
    protected void onPostResume() {
        super.onPostResume();
        log.d("life","activity2 is onPostResume...");
    }
    @Override
    protected void onStart() {
        super.onStart();
        log.d("life", "activity2 is onStart...");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        log.d("life","activity2 is onRestart...");
    }
    @Override
    protected void onStop() {
        super.onStop();
        log.d("life","activity2 is onStop...");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        log.d("life","activity2 is onDestroy...");
    }
    @Override
    public void finish(){
        super.finish();
        log.d("life","activity2 is finish...");
    }
    @Override
    public void finishActivity(int requestCode){
        super.finishActivity(requestCode);
        log.d("life","finishActivity2...");
    }

实现状态展示

可点击run查看
在这里插入图片描述
下图为单击消息栏后跳到聊天页面的生命周期状态变化
在这里插入图片描述
下图为点击发送获取消息的生命周期状态变化
在这里插入图片描述
下图为点击返回后显示的生命周期状态变化
在这里插入图片描述

3.实现最新的Activityforresult功能

点击发送显示具体发送内容,实现Activity间回传值

MainActivity3(具体发送消息页面)

在java目录下新建一个Empty Activity组件命名为MainActivity3,使用自动生成的布局名称在这里插入图片描述
在这里插入图片描述

activity_main3界面设计(layout文件)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity3">

</androidx.constraintlayout.widget.ConstraintLayout>
相关java文件编写

调用ActivityResultLauncher的launch方法实现页面内跳转到另一个Activity,在MainActivity2中续写相关代码如下

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        log.d("life","activity2 is onCreate...");
        Toast.makeText(this, "activity2 is onCreate...", Toast.LENGTH_SHORT).show();
        TextView textView6=findViewById(R.id.textView6);
        Intent intent = getIntent();
        String name = intent.getStringExtra("name");
        textView6.setText(name);
        btn_send = findViewById(R.id.btn_send);
        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(MainActivity2.this,MainActivity3.class);
                test.launch(intent1);
            }
        });
    }
    public ActivityResultLauncher test = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            if(result.getResultCode() == 999){
                TextView textView8 = findViewById(R.id.textView8);
                textView8.setText(result.getData().getStringExtra("msg"));
            }
        }
    });

在MainActivity3的java文件中添加如下代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        Intent intent = getIntent();
        intent.putExtra("msg","哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈");
        //给intent赋值后返回MainActivity2
        //自己设置的数字,和MainActivity2中保持一致
        setResult(999,intent);
        finish();//结束生命周期

三、遇到的问题及解决方法

1.配置完成后无法进入界面发生闪退
在这里插入图片描述
解决方法:对照logcat中找相关问题,发现linearlayout控件定义后忘记绑定,绑定后成功运行

四、运行结果展示

gif图片压缩后有失真/掉帧现象,正常运行流畅
在这里插入图片描述

五、clone地址

gitee地址无效请直接搜索https://gitee.com/waiaiy/android.git

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值