一、Activity的概念
是一种可以包含用户界面的组件,主要用于和用户进行交互。
二、Activity的三种装态
1、运行状态
(处于返回栈的栈顶的活动,系统回收可能性最小。)
2、暂停状态
(不在栈顶但仍可见,就进入暂停状态。)
3、停止状态
(不在栈顶且完全不可见时,就叫停止。)
4、销毁状态
(从栈中被移除就进入此状态,系统最倾向于回收它从而保证内存充足。)
三、Activity生命周期的七个方法
1、回调函数作用
1、onCreate()
创建时调用,初始化操作写在这里,如指定布局文件,成员变量绑定对应ID等。
2、onStart()
活动由不可见变可见时调用,Activity中目前还不太确定重载该方法时放些什么,但对后台Service来说,它的onStartCommand()是用来告诉系统如何重启,如判断是否在异常终止后重启,在何种状态下异常终,同为四大组件之一,这里估计功能也差不多。
3、onResume()
在活动准备好与用户交互时调用,此时活动一定处于栈顶,且在运行状态。onResume()和onPause()方法是调用比较频繁的,在这两个方法里面一般做很小耗时的操作,以增强用户体验。
4、onPause()
准备去启动或恢复另一活动时调用,当系统遇到紧急情况需要恢复内存,那么onStop(),onDestory()可能不被执行,因此你应当在onPause里保存一些至关重要的状态属性,这些属性会被保存到物理内存中。但此方法执行速度一定要快,否则会影响新栈顶活动的使用。
5、onStop()
活动完全不可见时调用,与onPause()区别主要看该活动是否会变得完全不可见。可以将稍耗时些的东西放在这,例如写数据库。
6、onDestory()
被销毁前用,之后该Activity进入销毁状态,一般在这里释放内存。
7、onRestart()
重启时调用,程序之前onStop的时候记录和保存了程序的状态,直接根据保存状态还原Activty的状态和效果,如果再之前程序onstop()的时候没有对程序进行一些操作,再次onRestart()的时候不会修改程序的状态
2、四种状态:
1、激活状态
Active/Runing一个新Activity启动入栈后,它在屏幕的最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
2、暂停状态
Paused,当Activity被另一个透明或都dialog样式的Activity覆盖时的状态。可见,但失去焦点。
3、停止状态
Stopd,当Activity被另一个Activity覆盖,失去焦点并不可见时处于停止状态。
4、销毁状态
Killed,Activity被系统杀死回收或者没有被启动时处于Killed状态。
3、生命周期触发的事件
1、Activity从创建到进入运行态所触发的事件
onCreate()->onStart()->onResume()
2、从运行状态到停止状态所触发的事件
onPause()->onStop()
3、从停止状态到运行状态所触发的事件
onRestart()->onStart()->onResume()
4、从运行状态到暂停状态所触发事件
onPause()
5、从暂停状态到运行状态所触发的事件
onResume()
6、进入销毁状态前所触发的事件
onDestory()
四、Activity栈
1、Android是通过一种任务栈的方式来管理Activity的。
2、当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。
3、一个Activity的实例的状态决定了它在栈中的位置。
4、处于前台的Activity总是在栈的顶端,当前台的Activity因为异常或其它原因被销毁时,处于栈第二层的Activity将被激活,上浮到栈顶。
5、当新的Activity启动入栈时,原Activity会被压入到栈的第二层。
五、Activity的操作
1、创建Activity
a、在APP->main->java->点击右键 ->new ->java calss
android.app.Activity
b、在新类中复写onCreate()函数
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
c、res->layout->右键->new->layout source File
d、Activity必须要有界面,将layout加进去,在新类onCreate()函数中添加代码:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newlayout);
}
e、将新创建的Activity添加到AndroidMainifest.xml中
<activity android:name=".MyActivity"/>
<activity android:name=".NewActivity"></activity>
2、启用Activity
a、在layout上创建按钮
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动NewActivity"
tools:layout_editor_absoluteX="160dp"
tools:layout_editor_absoluteY="515dp" />
b、在onCreate()中添加以下代码
/* 获取按钮 */
Button btn = (Button) findViewById(R.id.button1);
/* 设置监听点击事件*/
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*使用Intent,当前Activity.this,新Activity.class*/
Intent i = new Intent(MainActivity.this,MyActivity.class);
startActivity(i);
}
});
3、关闭Activity
a、在layout上创建按钮
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出Activity"
tools:layout_editor_absoluteX="160dp"
tools:layout_editor_absoluteY="515dp" />
b、在onCreate()中添加以下代码
/* 获取按钮 */
Button btn = (Button) findViewById(R.id.button2);
/* 设置监听点击事件*/
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*finsih()函数退出当前Activity*/
finish();
}
});
六、Activity的启动模式
暂未学习
七、Intent
1、显示Intent
启动新Activity的实现步骤:
a、创建Intent对象
Intent intent = new Intent();
b、关联新旧两个Activity
1)同一package
intent.setClass(Activity1.this,Activity2.class);
2)不同package
intent.ComponentName(Activity1.this,"PackagesName+ClassName");
c、传入参数:
intent.putExtra("Key","value");
d、启动新Activity
Activity1.this.startActivity(intent);
接收Activity的实现步骤:
a、获取Intent
Intent intent = getIntent();
b、获取参数
String value = intent.getStringExtra("Key");
使用Bandle()传输数据
a、发送数据
//创建Intent对象
Intent intent = new Intent();
//该类作用携带数据
Bundle bundle = new Bundle();
bundle.putString("name","336023");
intent.putExtras(bundle);
b、接收数据
Bundle bundle = getIntent().getExtras();
String data = bundle.getString("name");
2、隐式Intent
通过action跳转
1)匹配Intent Filter中的action
2)自定义action值,Category为“android.intent.category.DEFAULT”
3)Android对待所有传递给Context.startActivity()的隐式intent至少包含“android.intent.category.DEFAULT”(对应CATEGORY_DEFAULT常量)。因此,活动想要接收隐式intent必须要在intent filter中包含"android.intent.category.DEFAULT".
4)用Uri来做为Data
5)附加信息extras.
隐式调用:
Intent intent = new Intent();
//隐式意图,要做manifest.xml文件中声明意图过滤器
intent.setAction("com.intent.aa");
startActivity(intent);
AndroidManifest.xml文件声明
<activity android:name=".OtherActivity">
<intent-filter>
<action android:name = "com.intent.aa"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>