青春须早为,岂能长少年。这篇文章主要讲述Android Activity组件及其生命周期相关的知识,希望能为你提供帮助。
Activity是什么?
Activity 是用户接口程序,几乎所有的 Activity 都要和用户打交道。
每个 Activity 都提供一个用户界面窗口,一般情况下,该界面窗口会填满整个屏幕,但是也可以比屏幕小,或者浮在其他的窗口之上。
Activity的四种状态,运行状态,暂停状态,停止状态,销毁状态。
Activity的生命周期
名称 | 调用时间 |
---|---|
onCreate(Bundle savedInstanceState) | 创建 Activity 时调用。 设置在该方法中,还以 Bundle 的形式提供对以前储存的任何状态的访问。其中参数 savedInstanceState 对象是用于保存 Activity 的对象的状态。 |
onStart() | Activity 变为在屏幕上对用户可见时调用。 |
onResume() | Activity 开始与用户交互时调用(无论是启动还是重启一个活动,该方法总是被调用)。 |
onPause() | 当 android 系统要激活其他 Activity 时,该方法被调用,暂停或收回 CPU 和其他资源时调用。 |
onStop() | Activity 被停止并转为不可见阶段时调用。 |
onRestart() | 重新启动已经停止的 Activity 时调用。 |
onDestroy() | Activity 被完全从系统内存中移除时调用。 该方法被调用可能是因为有人直接调用 finish() 方法或者系统决定停止该活动以释放资源。 |
文章图片
文章图片
activity的创建,启动,关闭
1、创建① 创建继承自Activity的Activity
② 重写需要回调的方法
【Android Activity组件及其生命周期】③ 设置要显示的视图
但这些还不够,我们还要在AndroidManifest.xml文件中对建立的 Activity 进行注册,即在 < application> 标签下添加 < activity> 标签。
对于主 Activity(即入口Activity),还要为其添加 < intent-filter> 标签。(intent是很重要的概念,Activity通过Intent来表达自己的意图)
2、启动Activity分为入口Activity和其他Activity,他们的启动方式是不同的。
对于入口Activity,只需在AndroidManifest.xml中配置即可。
对于其他Activity,可以添加按钮点击事件,进行跳转,跳转代码如下。
intent = new Intent(MainActivity.this, DemorActivity.class); startActivity(intent);
3、关闭在单击事件中添加 finish()方法即可。
对于其他Activity,关闭后返回上一个Activity,若是入口Activity,则会退出程序,返回主屏幕。
平常我们用到刷新功能,可用如下代码完成。onCreat(null);
多个Activity的使用
Activity 数据传递共有三种:
- 通过 Intent 传递一些简单的数据。
- 通过 Bundle 传递相对复杂的数据或者对象。
- 通过 startActivityForResult 可以更方便地进行来回传递,当然前两种方法也可以来回传递。
文章图片
文章图片
package com.example.project_1; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //取值 String site1 = ((EditText)findViewById(R.id.et_site1)).getText().toString(); String site2 = ((EditText)findViewById(R.id.et_site2)).getText().toString(); String site3 = ((EditText)findViewById(R.id.et_site3)).getText().toString(); String name = ((EditText)findViewById(R.id.et_name)).getText().toString(); String phone = ((EditText)findViewById(R.id.et_phone)).getText().toString(); if(!"".equals(site1)& & !"".equals(site2)& & !"".equals(site3)& & !"".equals(name)& & !"".equals(phone)){ Intent intent = new Intent(MainActivity.this,AddressActivity.class); //创建Bundle对象,保存输入的信息 Bundle bundle = new Bundle(); bundle.putCharSequence("name",name); bundle.putCharSequence("phone",phone); bundle.putCharSequence("site1",site1); bundle.putCharSequence("site2",site2); bundle.putCharSequence("site3",site3); intent.putExtras(bundle); startActivity(intent); //传递到AddressActivity中 }else{ Toast.makeText(MainActivity.this,"请将收货地址填写完整",Toast.LENGTH_SHORT).show(); } } }); } }
View Code
文章图片
文章图片
package com.example.project_1; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class AddressActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_address); //接收传来的bundle值 Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString("name"); String phone = bundle.getString("phone"); String site = bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3"); TextView tv_name = findViewById(R.id.name); TextView tv_phone = findViewById(R.id.phone); TextView tv_site = findViewById(R.id.address); //输出在xml文件中 tv_name.setText("姓名:"+name); tv_phone.setText("电话:"+phone); tv_site.setText("地址:"+site); } }
View Code 调用另一个Activity并返回结果
实例:选择头像功能。
(在当前Activity点击选择头像按钮,跳转到头像列表Activity,选好后退出该Activity,并将选择结果呈现在主Activity)
文章图片
文章图片
package com.example.project_1; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class HeadActivity extends AppCompatActivity { //头像资源 private int[] imageId = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_head); GridView gridView = findViewById(R.id.grideview); BaseAdapter adapter = new BaseAdapter() {//重写监听器方法 @Override public int getCount() { return imageId.length; }@Override public Object getItem(int position) { return position; }@Override public long getItemId(int position) { return position; }@Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if(convertView==null){ imageView = new ImageView(HeadActivity.this); imageView.setAdjustViewBounds(true); imageView.setMaxHeight(150); imageView.setMaxWidth(158); imageView.setPadding(5,5,5,5); }else{ imageView = (ImageView)convertView; } imageView.setImageResource(imageId[position]); return imageView; } }; gridView.setAdapter(adapter); //选项被点击的监听器 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView< ?> parent, View view, int position, long id) { Intent intent = getIntent(); Bundle bundle = new Bundle(); bundle.putInt("imageId",imageId[position]); intent.putExtras(bundle); setResult(0x11,intent); finish(); } }); } }
View Code 接下来引入Fragment
Fragment介绍
Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!
Fragment生命周期:
文章图片
在Activity中添加Fragment
1、直接在布局文件中添加,用< Fragment> < /Fragment> 组件完成。
2、当Activity运行时添加。
推荐阅读
- Android 事件传递机制
- 家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)
- 安卓APP开发的初步了解
- 寒假家庭小账本——android studio安装及配置
- Android使用阿里镜像
- 简单实现Android手机“全局可调试”(ro.debuggable = 1)的方法锤子坚果3
- 使用idea编写Android程序,减小编译时间
- uniapp - 导航切换(样式)
- Android长按及拖动事件探究