activity中Activity fragmentActivity AppCompatActivity的区别:
Activity是最基础的一个,是其它类的直接或间接父类。
Activity中只能使用系统自带的host Fragment(API Level 11中加入),对应getFragmentManager方法来控制Activity和Fragment之间的交互。
FragmentActivity
在v4包中引入FragmentActivity,FragmentActivity间接继承自Activity,并提供了对v4包中support Fragment的支持。
在FragmentActivity中必须使用getSupportFragmentManager方法来处理support Fragment的交互。也可以处理support Fragment的嵌套使用。
AppCompatActivity
AppCompatActivity继承自FragmentActivity,同时取代了ActionBarActivity。
AppCompatActivity支持ActionBar功能,同时更推荐使用ToolBar。AppCompatActivity为支持Material Design风格控件提供了便利。
以上仅作了解,是基础。
设置应用启动页:
<activity
android:configChanges = "keyboardHidden|orientation"
android:name = ".module.splash.view.SplashActivity">
//标签内的就是定义的app的主界面(第一次启动进来的就是这个)
<intent-filter>
<action android:name = "android.intent.action.MAIN"/>
<category android:name = "android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
activity的隐式启动标记:
ACTION_PICK
启动一个子Activity,从提供的数据列表中选取一项
ACTION_SEARCH
启动一个Activity,执行搜索动作
ACTION_SENDTO
启动一个Activity,向数据提供的联系人发送信息
ACTION_SEND
启动一个可以发送数据的Activity
ACTION_VIEW
最常用的动作,对以Uri方式传送的数据,根据Uri协议部分以最佳方式启动相应的Activity进行处理。对于http:address将打开浏览器查看;对于tel:address将打开拨号界面并呼叫指定的电话号码
ACTION_WEB_SEARCH
打开一个Activity,对提供的数据进行Web搜索
ACTION_ANSWER
打开接听电话的Activity,默认为Android内置的拨号界面
ACTION_CALL
打开拨号盘界面并拨打电话,使用Uri中的数字部分作为电话号码
ACTION_DIAL
打开内置拨号界面,显示Uri中提供的电话号码
ACTION_EDIT
打开一个Activity,对所提供的数据进行编辑操作
ACTION_DELETE
打开一个Activity,对所提供的数据进行删除操作
ACTION_INSERT
打开一个Activity,在提供数据的当前位置插入新项
示例:
Intent intent = new Intent(Intent.ACTION_CALL);
//设置隐式启动的标志
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
需要注意的是,拨打电话还需要权限,我们还得在AndroidManifest.xml中添加这么一句:
<uses-permission android:name="android.permission.CALL_PHONE" />
activity的启动:
Intent intent = new Intent(this, MyActivity2.class);
startActivity(intent);
activity的启动模式:
standard:
标准模式,也是默认模式。每当我们启动一个Activity,系统就会相应的创建一个实例,不管这个实例是否已经存在。
singleTop:
栈顶复用模式,如果要启动的Activity处于栈的顶部,那么此时系统不会创建新的实例,而是直接打开此页面,同时它的onNewIntent()方法会被执行,可以通过Intent进行传值,而且它的onCreate(),onStart()方法不会被调用,因为它并没有发生任何变化。
singleTask:
栈内复用模式,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,因为singleTask本身自带clearTop这种功能。并且会回调该实例的onNewIntent()方法。
singleInstance:
单实例模式,该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
activity的通信方式:
Intent intent = new Intent(this, MyActivity2.class);
startActivityForResult(intent, 500); // 请求码 500
//获取返回的结果信息
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 实际正规写法应该是这样:
// requestCode和startActivityForResult保持一致
// resultCode和setResult(200) 200 保持一致
// 如果返回了intent 就需要判断 null != data
if (requestCode == 500 && resultCode == 200 && null != data) {
// ... 实际业务逻辑处理
}
}
这是第二个页面返回的代码(包含返回的值)
Intent intent = new Intent();
intent.putExtra("item", item);
// 返回结果码,还返回数据,数据用Intent传输
setResult(200, intent);
// 一定要finish(); 否则不结束当前MyActivity1,无法返回给MyActivity1
finish();
activity的生命周期:
1.onCreate()
这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
2.onStart()
这个方法在Activity由不可见变为可见时调用。
3.onResume()
这个方法在Activity准备好喝用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。
5.onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
6.onDestory()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
7.onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
Activity的四种状态
每个Activity在其生命周期中最多可能会有四种状态。
1.运行状态
当一个Activity位于返回栈(关于返回栈的概念下面再介绍)的栈顶时,这时Activity就处于运行状态,系统会将处于栈顶的Activity显示给用户。
2.暂停状态
当一个Activity不再处于栈顶位置,但仍然可见,这时Activity就进入了暂停状态。初学者可能会有这样的疑问,既然Activity都已经不在栈顶了,怎么会还可见呢,这是因为并不是每一个Activity都会占满整个屏幕的,比如对话框形式的Activity只会占用屏幕中间的部分区域。
3.停止状态
当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
4.销毁状态
当一个Activity从返回栈中移除后就变成了销毁状态。
结语:
以上就是对activity的基本认识,希望对大家有帮助。