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
- 2022-10-20 23:00:29.312 8642-8642/com.example.MyApplication D/Activity01:onCreate:is running.
- 2022-10-20 23:00:29.3208642-8642/com.example.MyApplication D/Activity01:onStart:is running.
- 2022-10-20 23:00:29.3248642-8642/com.example.MyApplication D/Activity01:onResume:is running.
关闭Activity01
- 2022-10-20 23:05:29.312 8642-8642/com.example.MyApplication D/Activity01:onPause:is running.
- 2022-10-20 23:05:29.3208642-8642/com.example.MyApplication D/Activity01:onStop :is running.
- 2022-10-20 23:05:29.3248642-8642/com.example.MyApplication D/Activity01:onDestory :is running.
新建一个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