移动开发课程?作业二

移动开发课程?作业二-图1

 一、设计目标

1、请根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化;

2、根据博客:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”),在前次作业的基础上增加列表项的单项点击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;

3、实现最新的activityforresult功能,具体要求如下:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
 

二、功能说明 目标一:生命周期状态变化的展示

生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。Activity也具有相应的生命周期,Activity的生命周期分为三种状态,分别是运行状态、暂停状态和停止状态。

1).运行状态:当Activity在屏幕的最前端时,它是可见的。有焦点的,可以用来处理用户的常见操作,如点击、双击、长按事件等,这种状态称为运行状态。

2).暂停状态:在某些情况下,Activity对用户来说仍然是可见的,但它不再拥有焦点,即用户对它的操作是没有实际意义的。例如,当最上面的Activity没有完全覆盖屏幕或者是透明的,被覆盖的Activity仍然对用户可见,并且存活。但当内存不足时,Activity可能会被杀死。

3).停止状态:当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。然而这些对用户来说不可见,内存不足,同样Activity很容易被杀死。

对于Activity生命周期的理解:

(1)onCreate:在首次创建 Activity 时调用。系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态,不过前提是捕获了该状态,而后会调用onStart方法。这是Activity生命周期的第一个方法,也是我们在android开发中接触的最多的生命周期方法。它本身的作用是进行Activity的一些初始化工作。此时Activity不可见。

(2)onStart:在 Activity 即将对用户可见之前调用。此时Activity可见,但是还没出现在前台,我们还看不到,无法与Activity交互。

(3)onResume:在 Activity 即将开始与用户进行交互之前调用。此时Activity经过前两个阶段的初始化已经蓄势待发。此时Activity可见,并且在这个阶段已经出现在前台。

(4)onPause:当Activity要跳到另一个Activity或应用正常退出时都会执行这个方法。此时Activity在前台并可见,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity时只有当一个Activity执行完了onPause方法后另一个Activity才会启动。

(5)onStop:在 Activity 对用户不可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就会调用此方法。而后如果 Activity 恢复与用户的交互,则会调用 onRestart 方法,如果 Activity 被销毁,则会调用onDestroy方法。

(6)onDestroy:在 Activity 被销毁前调用,这是 Activity 收到的最后调用。此时Activity不可见。

(7)onRestart:在Activity被停止后再次启动时调用(即屏幕熄灭后再次回到app,按下home键后再次回到app),而后会调用onStart方法。此时Activity可见。


 

通过安卓Activity的生命周期活动图,我们可以直观地理解了Activity各生命周期间的关系。

View>Tool Windows>Logcat查看生命周期的状态变化

 设计一个案例
package com.example.myapplication;
        import android.os.Bundle;
        import android.util.Log;
        import androidx.appcompat.app.AppCompatActivity;

public class Activity01 extends AppCompatActivity {
    private static final String TAG = "Activity01";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity01);
        Log.d(TAG, "onCreate: is running.");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: is running.");
    }

    @Override
    protected void onStop() {
        Log.d(TAG, "onStop: is running.");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        Log.d(TAG, "onDestroy: is running.");
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        Log.d(TAG, "onPause: is running.");
        super.onPause();
    }

    @Override
    protected void onResume() {
        Log.d(TAG, "onResume: is running.");
        super.onResume();
    }

    @Override
    protected void onRestart() {
        Log.d(TAG, "onRestart: is running.");
        super.onRestart();
    }
查看生命周期

启动Activity01

  1. 2022-10-20 23:00:29.312 8642-8642/com.example.MyApplication D/Activity01:onCreate:is running.
  2. 2022-10-20 23:00:29.3208642-8642/com.example.MyApplication  D/Activity01:onStart:is running.
  3. 2022-10-20 23:00:29.3248642-8642/com.example.MyApplication D/Activity01:onResume:is running.

关闭Activity01

  1. 2022-10-20 23:05:29.312 8642-8642/com.example.MyApplication D/Activity01:onPause:is running.
  2. 2022-10-20 23:05:29.3208642-8642/com.example.MyApplication  D/Activity01:onStop :is running.
  3. 2022-10-20 23:05:29.3248642-8642/com.example.MyApplication D/Activity01:onDestory :is running.
目标二:实现Activity的点击跳转功能

新建一个activity_main2文件用来展示我们点击跳转后的内容

activity_main2.xml文件



    

    

 activity_main2.java文件

package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity2 extends AppCompatActivity{

    private ImageView imageView;
    private TextView textView1,textView2;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);
        Intent intent = getIntent();
        String first = intent.getStringExtra("名字");
        imageView =findViewById(R.id.V_Animal);
        textView1 = findViewById(R.id.T_name);
        textView2 = findViewById(R.id.T_introduce);
        button = findViewById(R.id.B_fanhui);
        textView1.setText(first);
        textView2.setText(second);
        imageView.setImageResource(intent.getIntExtra("tx",1));
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity2.this,first,Toast.LENGTH_SHORT).show();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }});
    }
}
增加返回按钮修改Myadapter
package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import java.util.Map;


public class Myadapter extends RecyclerView.Adapter {

    private List<Map> data;

    private Context context;
    private View inflater;
    public Myadapter(Context context,List<Map> data){
        this.data= data;
        this.context=context;
    }
    @Override
    public myviewholder onCreateViewHolder( ViewGroup viewGroup, int viewType) {
        inflater = LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);
        myviewholder myviewholder=new myviewholder(inflater);
        return myviewholder;
    }

    @Override
    public void onBindViewHolder(myviewholder holder, @SuppressLint("RecyclerView") int position ){
        holder.title.setText(data.get(position).get("标题").toString());
        holder.content.setText(data.get(position).get("简介").toString());
        holder.head_port.setImageResource((int)(data.get(position).get("头像")));
        holder.tipView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context,MainActivity2.class);
                intent.putExtra("tx",(int)data.get(position).get("头像"));
                intent.putExtra("名字",data.get(position).get("简介").toString());
                context.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {

        return data.size();
    }

    class myviewholder extends RecyclerView.ViewHolder{
        TextView title;
        TextView content;
        ImageView head_port;
        LinearLayout tipView;
        public myviewholder( View itemView) {
            super(itemView);
            head_port = itemView.findViewById(R.id.touxiang);
            title=itemView.findViewById(R.id.textView_1);
            content=itemView.findViewById(R.id.textView_2);
            tipView=itemView.findViewById(R.id.onechat);
        }
    }
}

My Application

目标三:实现activityforresult添加按钮接受传回值功能

新建一个Result文件用来展示我们点击后的内容

Result.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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

import java.util.Calendar;

public class Result extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);


        Intent intent =getIntent();
        intent.putExtra("data","消息已发送!n"+
                Calendar.getInstance().getTime());
        setResult(666,intent);



    }
}

Result.xml


  

  
结果截图

三、小结

本次实验是在以往的项目基础上进行的,添加了跳转功能和添加按钮收到传回值的功能,也进一步加深了对activity生命周期的理解,代码借鉴了老师上课的代码,也加入了一些我自己的理解,总之本次实验对今后学习有很大帮助。

四、源码仓库地址

安卓开发: 使用安卓开发工具实现类微信界面设计。 - Gitee.com

转载请说明出处 内容投诉内容投诉
南趣百科 » 移动开发课程?作业二

南趣百科分享生活经验知识,是您实用的生活科普指南。

查看演示 官网购买