安卓第二次作业 Activity的生命周期与跳转

一.实验环境:

Windows系统,Android Studio

二.界面功能

1.实现对Activity生命周期的理解,使用log展示生命周期的状态变化

2.增加列表项的单项点击功能,点击“联系录”界面的item可以弹出另一个itemactivity

3.实现最新的activityforresult功能,点击itemactivity中的button按钮可以收到resultactivity的返回值

三.界面设计代码

1.activity_item

点击“查看当前时间按钮”即可在下方“返回信息”处显示当前的时间信息

<?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=".MainActivity">

    <TextView
        android:id="@+id/itemtextView1"
        android:layout_width="188dp"
        android:layout_height="47dp"
        android:text="详情页面"
        android:textAlignment="center"
        android:textSize="34sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.56"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.175" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="132dp"
        android:text="查看当前时间"
        android:textSize="34sp"
        app:iconPadding="15sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.554"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/itemtextView1" />

    <TextView
        android:id="@+id/itemtextView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="32sp"
        android:layout_marginRight="32sp"
        android:text="返回信息"
        android:textAlignment="textStart"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.668" />
</androidx.constraintlayout.widget.ConstraintLayout>

设置后的效果界面如下

 2.itemActivity

作为点击recycleview后跳转的activity

package com.example.work2;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

public class ItemActivity  extends AppCompatActivity {
    private Button button;
    private TextView textView;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item);
        textView = findViewById(R.id.itemtextView2);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ItemActivity.this,resultActivity.class);
                test.launch(intent);
            }
        });
    }

    public ActivityResultLauncher test = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>(){

                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == 2){
                        Log.d("xr","onActivityResultLauncher...");
                        textView.setText(result.getData().getStringExtra("result"));
                    }
                }
            });
}

3.resultActivity

实现点击button按钮后的返回值接收功能

package com.example.work2;

import static java.util.Calendar.*;

import android.content.Intent;
import android.icu.text.SimpleDateFormat;
import android.os.Bundle;
import android.security.FileIntegrityManager;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class resultActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        Intent intent = getIntent();
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
        intent.putExtra("result","现在的时间是:"+ getInstance().getTime());
        setResult(2,intent);
        finish();
    }
}

4.Adapter

在Adapter文件中的BindViewHolder函数中对recycleView的item添加点击监听,并创建bundle,intent,通过intent将bundle传给已创建好的新的activity中。

 四.关于activity的周期


Activity 在生命周期中共存在三个状态,这三个状态如下:

1) 运行态

指 Activity 运行于屏幕的最上层并且获得了用户焦点。

2) 暂停态

指当前 Activity 依然存在,但是没有获得用户焦点。

在其之上有其他的 Activity 处于运行态,但是由于处于运行态的 Activity 没有遮挡住整个屏幕,当前 Activity 有一部分视图可以被用户看见。处于暂停态的 Activity 保留了自己所使用的内存和用户信息,但是在系统极度缺乏资源的情况下,有可能会被杀死以释放资源。

3) 停止态

指当前 Activity 完全被处于运行态的 Activity 遮挡住,其用户界面完全不能被用户看见。

处于停止态的 Activity 依然存活,也保留了自己所使用的内存和用户信息,但是一旦系统缺乏资源,停止态的 Activity 就会被杀死以释放资源。

activity的回调方法有以下7种:

1.onCreate(Bundle savedInstanceState) 

2.onStart()

3.onResume()

4.onPause()

5.onStop()

6.onRestart()

7.onDestroy()

启动 Activity:在这个阶段依次执行 3 个生命周期方法:onCreate、onStart 和 onResume。

Activity 失去焦点:如果在 Activity 获得焦点的情况下进入其他的 Activity 或应用程序,这时当前的 Activity 会失去焦点。在这一阶段,会依次执行 onPause 和 onStop 方法。

Activity 重获焦点:如果 Activity 重新获得焦点,会依次执行 3 个生命周期方法:onRestart、onStart 和 onResume。

关闭 Activity:当 Activity 被关闭时,系统会依次执行 3 个生命周期方法:onPause、onStop 和 onDestroy。

五.运行结果展示

点击recycleview后的界面

 点击“查看当前时间”按钮后的界面

 六 .实验小结

     在本次实验中,实现了各个activity之间的转换,对activity的生命周期更加了解,也通过activityforresult功能实现了用button来传值,在实验中我也遇到了很多困难。

     比如在进行result中要加入finish函数才可以结束activity,从而产生回传值;对于intent中的key和resultcode一开始并没有弄清楚,导致回传值一直出不来;

     对于itemActivity的onCreate函数,一开始我将onCreate打成了OnCreate,所以导致了点击recycleview后弹出的界面为空白界面;

     在设置回传值的时间时,一开始我使用了calendar类和date类时,显示的时间总是GMT时间,和系统时间相差8小时,在经过网络上的搜索过后也尝试了很多方法,但最后发现加入了TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));语句后就可以正常显示了。(改时区的方法我试过不知道为什么没用,电脑的时区也是正确的,可能是注册表的问题)

   

    源码地址附在最后:安卓仓库: 安卓作业仓库,存放源码 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值