您的位置:首页 > 移动开发 > Android开发

Android基础-----Activity,Intent

2016-01-06 10:20 363 查看

1.Activity概述

1.主要负责与用户进行交互,存放view的地方

2.所有的activity都会放在一个栈中

2.Activity的生命周期



注意:

1.一般初始化在onCreate()中

2.当一个Activity没有被销毁,但是要重新调用数据的时候,可以在onstart()方法中调用方法,不建议在onResume()中写,会有延迟

3.当一个Activity跳转到另一个Activity:

A:onPause()-B:onCreate()-B:onStart()-B:onReasume()-A:onStop-A:onDestory()

3.Activity的创建方式

1.修改方法:

AndroidManifaest.xml ->activity ->android:launchMode=standard | singleTop | singleTask | singleInstance

standard

标准启动模式,不指定启动模式的时候默认采用这种方式

当这个activity被调用的时候无论任务栈中是否已经存在,都会重新创建一个新的activity

singleTop

当一个activity在栈顶的时候,这个activity不会被重新创建

当不再栈顶的时候,这个activity会被重新创建

singleTask

当一个activity已经存在与任务中的时候,这个activity不会被重新创建,而是在任务栈中取出,并且把这个activity上面的activity全部销毁,一个任务栈中只有一个这个activity实例

singleInstance

这个activity会被放进一个新的任务栈中,并且这个任务栈中只有一个activity,不能有其他的activity

实例:例如电话的键盘activity,就是一个这种模式,所有的其他任务调用电话键盘都不会重新创建一个activity,而是调用的同一个activity

4.Activity的退出时候状态保存

方法: onSaveInstanceState(Bundle outState)

通过bundle对象保存相关信息,这个活动在oncreate中的bundle中可以获取这些信息

Bundle:存放的数据类型:

1.是一个map数据类型,通过键值对来存储信息

2.存储类型:

1.基本数据类型和String类型

2.基本数据类型数组和String类型数组

3.Parcelable类型及Parcelable类型数组

4.Serializable类型(无Serializable类型数组!)

5.ArrayList

5.Activity的横竖屏幕切换

1.屏幕在切换的时候默认会先销毁当前activity,然后重新创建一个新的activity

在AndroidMeafest.xml中:这样就不会重新调用oncreate方法

android:configChanges=”keyboardHidden|screenSize|orientation”

写死横竖屏幕:

android:screenOrientation=”portrait” | “landscape”

Activity中:

竖屏:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

横屏:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

——————————————————–

Intent

Intent分为显示Intent和隐式Intent

显示Intent:

1启动活动/服务/广播

1.1 Intent intent = new Intent(MainActivity.this,AAA.class);

也可以通过包名启动

1.2 startActivity(intent);

2.设置data数据

2.1

<activity>
//用于指定数据的写一部分,如:http ,tel
<data android:scheme="http" />
//指定主机名
<data android:host="" />
//指定端口
<data android:port="" />
//指定路径
<data android:path="" />
//指定mimetype
<data android:mimeType="" />


2.2 intent.setData(Uri.parse(“aaa”));

Uri.parse(“aaa”):把一个字符串编程uri对象

Uri.fromFile(file):获取一个文件的uri

3 Activity之间Intent传输数据

3.1intent可以存放基本数据类型/String类型/bundle类型

//传输ArrayList集合
intent.putIntegerArrayListExtra(name, value);
//可以传入bundle/Serializable/Parcelable对象
intent.putExtras(src);


3.2 接收数据

getIntent().getParcelableExtra(name);
getIntent().getSerializableExtra(name);
getIntent().getExtras();
getIntent();


4 获取返回的数据

4.1 startActivityForResult(intent, requestCode);启动一个活动

4.2 重写onActivityResult

@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
super.onActivityResult(arg0, arg1, arg2);
}


4.3 注意 : 开启的Activity必须调用finish()方法才能获取返回的数据

隐式Intent:

1.启动活动/服务/广播

1.1设置Activity的action和category ,category 一般是Default

<intent-filter>
<action android:name="android.intent.action.AAA" />
<category android:name="android.intent.category.Default" />
</intent-filter>


1.2在Activity中

Intent intent = new Intent();
intent.setAction("android.intent.action.AAA");
intent.addCategory("android.intent.category.Default");
startActivity(intent);


Parcelable和Serializable区别

Parcelable : 是写入到内存中,这样读写速度快,但是有可能会造成oom异常

Serializable : 是写入到本地文件中,然后在读取文件,写入速度慢

Parcelable: bitmap实现了这个接口,所以能直接传递

import android.os.Parcel;
import android.os.Parcelable;

public class Persion implements Parcelable {
private String name;
private int age;

//默认返回0,不用修改
@Override
public int describeContents() {
return 0;
}

//写入数据
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}

//格式固定,CREATE:名称固定,不能改变
public static final Parcelable.Creator<Persion> CREATE = new Parcelable.Creator<Persion>() {

@Override
public Persion createFromParcel(Parcel par) {
Persion persion = new Persion();
//这里的顺序和写入的顺序必须相同,否则会出问题
persion.name = par.readString();
persion.age = par.readInt();
return persion;
}

@Override
public Persion[] newArray(int arg0) {
//返回这个类型的数据,格式固定
return new Persion[arg0];
}
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: