Activity的一些小知识

本文详细介绍了Android中Intent的多种使用方法,包括显示意图和隐式意图,以及如何通过Intent在Activity间传递数据。此外,还深入探讨了Activity的生命周期,并通过实例说明不同场景下Activity生命周期方法的调用顺序。

一、intent(页面的转换)
方法1:在Intent的构造函数中指定
// Intent:意图 (显示意图)目的 Activity界面跳转的桥梁,指定从哪个Activity跳转到哪个Activity
// 启动源,启动目标即 “出发地”和“目的地”
// Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 启动Intent中指定的Activity
// startActivity(intent);
// 方法2:用setClass()方法
// Intent intent2 = new Intent();
// intent2.setClass(MainActivity.this, SecondActivity.class);
// startActivity(intent2);
// 方法3:通过指定组件名称的方式实现界面跳转(ComponentName可以实现从一个app跳转到另外一个app,必须是入口级Activity且手机安装该应用)
// Intent intent3 = new Intent();
// ComponentName componentName = new ComponentName(MainActivity.this, SecondActivity.class);
// ComponentName componentName = new ComponentName("com.qianfeng.day05_statedrawable_sample", "com.qianfeng.day05_statedrawable_sample.MainActivity");
// intent3.setComponent(componentName);
// startActivity(intent3);
// 方法4:通过指定目标文件的类名来实现跳转 源码中调用的是ComponentName
// Intent intent4 = new Intent();
// intent4.setClassName("com.qianfeng.day06_createactivity", "com.qianfeng.day06_createactivity.SecondActivity");
// startActivity(intent4);
// 方法5:隐式意图(跨应用启动activity,不需要知道包名和类名 只需要知道Action就可以隐式的启动Activity)
Intent intent5 = new Intent();
intent5.setAction("com.qianfeng.day06_createactivity.SecondActivity");
// 其实系统默认有这句话,默认省略了这句话
// intent5.addCategory("android.intent.category.DEFAULT");
startActivity(intent5);
二、传值
// 第一种方式:Intent直接传
// intent.putExtra("Name", "梁思卓");
// intent.putExtra("Sex", "女");
// intent.putExtra("Age", 18);
// intent.putExtra("isMarried", true);
// 第二种方式:采用bundle封装最后调用intent.putExtras(bundle);
Bundle bundle = new Bundle();
bundle.putString("Name", "小贤");
bundle.putString("Sex", "男");
bundle.putInt("Age", 20);
bundle.putBoolean("isMarried", false);
// intent.putExtras(bundle);
//第三种方式:采用bundle封装最后调用intent.putExtra("BundleKey",bundle);
intent.putExtra("BundleKey", bundle);
startActivity(intent);
//先得到一个Intent对象--->得到开启这个Activity的Intent对象
Intent intent = getIntent();
取法
// 对应的是第一种传值方式的取法
// String name = intent.getStringExtra("Name");
// String sex = intent.getStringExtra("Sex");
// int age = intent.getIntExtra("Age", 0);
// boolean isMarried = intent.getBooleanExtra("isMarried", false);

// 对应的是第二种传值方式的取法
Bundle bundle = intent.getExtras();
// 对应的是第三种传值方式的取法
// Bundle bundle = intent.getBundleExtra("BundleKey");
String name = bundle.getString("Name");
String sex = bundle.getString("Sex");
int age = bundle.getInt("Age");
boolean isMarried = bundle.getBoolean("isMarried", false);
2、application
/**
* 将需要存储的数据作为application类的属性
* @author Administrator
*
* Activity的传值方式二:
* 主要使用本分数据在多个界面之间进行传递
* 1.创建Application的子类,将需要进行全局存储的数据声明为子类的属性,并且提供了公共访问的set和get方法
* 2.源Activity中通过getApplication()方法得到全局的对象,然后调用setXXX()存储值
* 3.目标Activity通过getApplication()方法得到全局对象,然后调用getXXX()取值
* 4.将Application子类的全局对象在清单配置文件中注册,如果不注册会报ClassCastEception(在application中加上android:name=".MyApplication")
*
*/
三、Acyivity生命周期
/**
* 当Activity第一次被创建的时候回调的方法,通常做一些初始化的操作
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "MainActivity----onCreate");
}
//点击按钮界面跳转
public void click(View view){
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}

/**
* 当Activity用户可见的时候回调的方法
*/
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "MainActivity----onStart");
}
/**
* 当Activty获取用户焦点的时候回调的方法(能够与用户交互)
*/
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "MainActivity----onResume");
}
/**
* 当Activity失去用户焦点的时候回调的方法
*/
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "MainActivity----onPause");
}
/**
* 当Activity用户不可见的时候回调的方法
*/
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "MainActivity----onStop");
}
/**
* 当Activiy重新用户可见的时候回调的方法
*/
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "MainActivity----onRestart");
}
/**
* 当Activity销毁的时候回调的方法 通常做一些资源释放的操作
*/
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "MainActivity----onDestroy");
}



//如果启动的目标Activity需要回传结果就需要使用startActivityForResult
startActivityForResult(intent, REQUEST_CODE);
// startActivity(intent);

setResult(Activity.RESULT_OK, intent);//将结果存储到Intent对象中进行回传
ResultActivity.this.finish();//表示销毁当前的Activity
/**
* 重写该方法处理回传回来的结果
* requestCode:请求码
* resultCode:结果码
* data:结果界面调用setResult方法回传回的intent对象
*
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==REQUEST_CODE && resultCode==-1) {
String result = data.getStringExtra("result");
editTextResult.setText(result);
}
}

四、生命周期
生命周期

人的生命周期:
出生-->婴儿-->儿童-->少年-->青年-->中年-->老年-->死亡

正常生命周期(完整生命周期)
onCreat()-->onStart()-->onResum()-->onPause()-->onStop()-->onDestroy()

连续打开两个界面,按两次返回键
A:onCreate()-->A:onStart()-->A:onResume()-->A:onPause()-->B:onCreate()-->B:onStart()-->B:onResume()-->A:onStop()之后用户第一次按返回键 B:onPause()-->B:onStop()-->B:onDestroy()-->A:onRestart()-->A:onStart()-->A:onResume()之后用户第二次按返回键A:onPause()-->onStop()-->onDestroy()

打开界面按Home键
onCreate()-->onStart()-->onResume()-->onPause()-->onStop()

如果再重新启动会执行onRestart()-->onStart()-->onResume()

作业:打开一个界面,按横竖屏切换生命周期的变化。解决法案?
android:configChanges="orientation|keyboardHidden|screenSize"
为什么要学习生命周期?
在什么时候做什么事

生命周期按照阶段来划分分为三种
完全生命周期onCreate()---onDestroy()
可见生命周期onStart()---onStop()
前台生命周期(foreground lifetime) onResume()---onPause()


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值