
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
关闭Activity01
新建一个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
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