1 Activity是什么
Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。
一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。将Activity设为主活动的方法,如下面代码所示需要在AndroidManifest文件中添加以下内容:
<application>
....
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
....
</application>
Activity 必须在 AndroidManifest.xml 注册,如果没有注册这 Activity 就不能正常运行,其实在正常情况下在使用Android 中的四大组件(Activity,Service,BrocastReceiver,ContentProvider)时都需要再 AndroidManifest.xml 中注册。
2 Activity创建流程
先给出一个简单的示例,然后在分步骤讲解
// MainActivity.java
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// AndroidManifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1> 自定义Activity类名 ,继承Activity类或者他的子类
class MainActivity extends AppCompatActivity
继承Activity和AppCompatActivity的区别:
AppCompatActivity兼容了很多低版本的一些东西
AppCompatActivity相对于Activity的变化:主界面带有toolbar的标题栏
2> 重写onCreate()方法,在该方法中调用setContentView()设置要显示的视图
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
3> 在AndroidManifest.xml中对Activity进行配置
// AndroidManifest.xml
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
4> 启动Activity: 调用startActivity(Intent)
Intent it = new Intent(MainActivity.this, MyActivity.class);
startActivity(it);
5> 关闭Activity: 调用finish,直接关闭当前Activity
我们可以把它写到启动第二个Activity的方法中,当启动第二个Activity时,第一个Activity就会被关闭
3 启动一个Activity的几种方式
Activity是通过Intent用来在应用程序的Activity间启动、停止和传输。
启动Activity有三种方法:
1 显示启动
显式启动比较简单,首先创建一个Intent,指定应用程序上下文和需要启动的Activity,然后调用startActivity来启动新的Activity。
<!--AndroidManifest.xml-->
<activity android:name=".SecondActivity"></activity>
//启动Activity
Intent it = new Intent(this, SecondActivity.class);
startActivity(it);
2 隐式启动
若 SecondActivity 在AndroidManifest.xml文件中配置 intent-filter 的 action 和 category、data,如下:
<intent-filter>
<action android:name="myaction2"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="mycategory" />
</intent-filter>
那么可以通过如下方式启动 SecondActivity :
Intent intent = new Intent("myaction2");
startActivity(intent);
3 默认启动
通过桌面图标点击应用图标进入程序的第一个Activity,因其启动方式有别上述两个方式,将其划分为第三类的启动方式。 若Activity在AndroidManifest.xml文件的intent-filter的action和category,如下:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
那么,点击桌面的应用图标即可启动Activity。
注:如果在N个Activity中都配置上述的action和category,那么桌面会有N个应用的图标,点击不同的图标会进入对应的Activity。
4 Activity的生命周期
Note: onCreate, onStart, onResume(), onPause(), onStop(), onRestart(), onDestroy()这些都是回调函数,我们不能够去调用,我们能做的知识重写这些回调函数里的内容,什么时候调用由Activity决定。
我们能够手动调用的只有finish()方法,该方法用于关闭某个Activity。
onCreate():你必须实现此回调,它会在系统创建你的 Activity 时触发。你的实现应该初始化Activity的基本组件。
onStart():此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。到了这一步用户可见不可交互。
onResume():此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在onResume()方法中实现的。到了这一步用户可见可交互。
onPause():当用户点按"返回"或"最近使用的应用"按钮时,Activity失去焦点并进入"已暂停"状态时,系统就会调用onPause()。到这一步用户可见不可交互。系统会停止动画等消耗CPU的操作。
onStop():到了这一步用户不可见。停止动画和刷新UI等。
onRestart():当处于"onStop()"状态的Activity即将重启时,系统就会调用此回调。
onRestart()会从Activity停止时的状态恢复Activity至运行状态。
onDestroy():这是Activity最后一个方法。可以用isFinishing()来判断它,如果有dialog在运转,要在这个界面将dialog给cancel掉,不然抛异常。
5 Activity的四种状态
Running(运行):在屏幕前台(位于当前任务堆栈的顶部)
Paused(暂停):失去焦点但仍然对用户可见(覆盖Activity可能是透明或未完全遮挡)
Stopped(停止):完全被另一个Activity覆盖
Destroyed(销毁):退出,完全销毁