Android开发-1-创新互联
- 基本项目结构
- 活动
- 返回栈
- 活动生命周期
- 活动状态
- 生命周期
- 生存期
- 活动创建
- 活动切换
- 创建Intent
- 跳转至新活动
- 结束当前活动,返回上一级
- Fragment
--app
--manifests
--AndroidManifest.xml(项目启动文件,包括项目基本信息及所有活动注册信息)
--java
--.../XXXActivity.java(活动实体类)
--res(资源文件夹)
--layout
--activityXXX.xml(活动布局文件)
--gradle scripts
--build.gradle(project)(部署文件,包括SDK版本及依赖等)
活动通俗来讲,一个页面(不一定全屏)相当于一个活动,每个活动具有活动周期,页面切换即是活动切换;活动中有各种控件,每个控件可以提供不同的功能(如按钮、文本框)。
每个活动对应一个实体类和一个布局文件,在实体类的onCreate方法中需要加载布局文件,在布局文件中添加的控件可通过id等方式被实体类调用,从而实现页面的交互。
安卓基本的管理单位是活动,当一个活动被启动时,将会被入栈;当活动被销毁时,会被出栈。即:当前页面所显示的活动为当前栈顶的活动。
返回栈不一定只有一个,但页面激活顺序只与当前返回栈相关,如:
- 活动1启动,入栈1
- 通过活动1启动活动2,活动2入栈2,当前页面显示栈2的栈顶活动2
- 通过活动2启动活动3,活动3入栈1,当前页面显示栈1的栈顶活动3
在这种情况下,栈1从底到顶为活动1、活动3,栈2只有活动2,那么从活动3选择返回,栈1将会弹出活动3,当前页面显示栈1的栈顶活动1;而从活动1选择返回,栈1将会弹出活动1,此时栈1已空,页面将切换到栈2的栈顶活动2。
活动生命周期(此部分参考博客Android开发 入门篇(一))
活动状态每个活动具有四种状态:运行状态、暂停状态、停止状态、销毁状态。
- 运行状态:处于返回栈栈顶的活动处于运行状态
- 暂停状态:活动不处于栈顶但是仍然可见的时候,处于暂停状态(不是所有活动都必须占满全部屏幕,比如弹出的对话框就只占据部分屏幕)
- 停止状态:活动不处于栈顶且完全不可见的时候就处于停止状态,系统会保留相应状态和成员变量,但是不可靠,如果内存不够用的时候,这部分将被回收
- 销毁状态:当一个活动从栈顶移除后变成销毁状态,系统会优先回收这种状态的活动(通过返回键或finish()方法销毁)
Activity类中定义了七个回调方法,覆盖了生命周期中的每一个环节
- onCreate():在活动第一次被创建的时候调用,实现布局的加载、事件绑定等
- onStart():在活动由不可见变为可见的时候调用
- onResume():在活动准备好和用户进行交互的时候调用,此时活动一定处于栈顶,且处于运行状态
- onPause():在系统准备启动或恢复另一个活动时调用。一般在这里需要释放一些消耗cpu的资源,保存一些关键数据,要快,否则可能会影响新活动
- onStop():在活动完全不可见的时候调用。若启动的新活动是不会使旧活动不可见的活动(类似对话框的活动),则会使用onPause(),onStop()不会执行
- onDestroy():在活动被销毁之前调用,之后活动会变为销毁状态
- onRestart():活动由停止状态变为运行状态的时候调用该方法,即活动被重新启动
- 完整生存期:即onCreate()和onDestroy()之间所经历的是完整生命期,在onCreate()中进行初始化操作,在onDestroy()中进行内存的释放
- 可见生存期:在onStart()和onStop()之间所经历的是可见生命期。在这个期间活动都是可见的,即便某些无法交互的时候也是可见的。应在onStart()中完成资源的加载,onStop()中进行资源的释放
- 前台生存期:在onResume()和onPause()之间所经历的是前台生存期。在这个期间活动总是处于运行状态,可以和用户进行交互
- 创建活动实体并加载页面布局
public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
其中,页面布局引用方法为:R.res目录下页面布局文件夹.页面布局文件名,如例子中R.layout.activity_main对应:
- 在AndroidManifest中注册活动:
其中:android.name应为活动实体类的路径,因为外部有package,可以简写;android.exported为Android12添加的必写标签,之前版本可以不写;intent-filter标签中用于进行活动切换,后文再说。
activity标签位置:
...
活动切换活动切换分为两种:创建新活动、返回上一活动。
活动切换通过intent进行。
- 创建新活动的intent
例如我要从FirstActivity切换到SecondActivity,SecondActivity的注册信息如下:
创建Intent有几种方式创建指向SecondActivity的intent:
- 根据类获取:new Intent(当前类的content,目标类的class)
例:new Intent(FirstActivity.this, SecondActivity.class) - 根据action和category获取:new Intent(目标类的action)
注:Intent仅能跳转到category=android.intent.category.DEFAULT的活动,即,如果两个活动action相同,category不同,则会直接跳转到DEFAULT活动;若两个活动action和category都相同,则会弹出跳转选择框。
通过startActivity(intent)跳转至新活动
通过startActivity(intent, requestCode)跳转至新活动,并要求新活动销毁时返回结果,结果以requestCode接收(方法已过期)
Intent intent = new Intent("intentNameTest");
startActivity(intent);
//startActivityForResult(intent, 1)
结束当前活动,返回上一级销毁当前活动通过finish()方法
如果需要返回结果,则要通过一个空intent进行传递,返回数据通过putExtra方法传输:
Intent emptyIntent = new Intent();
emptyIntent.putExtra("data_return", "返回数据");
setResult(1, emptyIntent);
finish();
上级活动通过重写onActivityResult接收,数据通过get相关方法接收:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);
String str = data.getStringExtra("data_return");
}
Fragmentfragment是依托于活动运行的,相当于一个小模块,每个活动中可以有多个fragment,同一个fragment也可以被多个活动引用。
fragment的生命周期不同于活动,单独计算,但受活动影响(活动启动不代表fragment启动,活动销毁fragment一定销毁)。
有一些控件是专属于fragment的。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:Android开发-1-创新互联
链接分享:http://abwzjs.com/article/gscpo.html