Android笔记——Activity生命周期与数据传递
来源:互联网 发布:mac git ssh key 生成 编辑:程序博客网 时间:2024/06/07 22:04
1.概述
四大组件之一,用于表示界面,与用户交互
涉及到的概念:Application、 Activity、 Activity栈 、Task
2.状态与生命周期
2.1 三个基本状态:
1)resumed 一个新activity启动入栈,它在屏幕最前端,处于栈的最顶端,此时它处于与用户交互的激活状态
2)paused 当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态,此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它依然可见,但它已经失去了焦点故不可与用户交互
3)stoped 当Activity被另一个Activity覆盖,失去焦点并不可见时即处于stoped状态
2.2 生命周期
//Activity创建时调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } //Activity可见时调用 @Override protected void onStart() { super.onStart(); } //Activity重新可见时调用 @Override protected void onRestart() { super.onRestart(); } //Activity获得焦点时调用 @Override protected void onResume() { super.onResume(); } //Activity失去焦点但仍然可见时调用(在其他应用需要内存时,可能会被kill) @Override protected void onPause() { super.onPause(); } //Activity 完全不可见时调用(会被系统kill) @Override protected void onStop() { super.onStop(); } //Activity被销毁时调用(会被系统kill) @Override protected void onDestroy() { super.onDestroy();
3.状态数据暂存
3.1 onPause()
当系统要启动另一个activity时调用(其他的activity显示之前),这个方法通常被用来提交那些持久数据的改变、停止动画、和其他占用CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快,不然可能会出现ANR。
3.2 onSaveInstanceState()
它会将一个Bundle对象传递给该方法。当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()方法调用的onRestoreInstanceState(), 所以它们两个都可以恢复捕获的状态。(意思是onRestoreInstanceState只有在Activity被系统回收后再重新生成时才会被调用)
onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,
eg:
用户按下HOME键时。
长按HOME键,选择运行其他的程序时。
按下电源按键(关闭屏幕显示)时。
从activity A中启动一个新的activity B时。
屏幕方向切换时,例如从竖屏切换到横屏时。
// Activity即将移出栈顶保留UI状态时调用此方法 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d("***", "onSaveInstanceState"); } // onCreate完成后被调用,用来恢复UI状态 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.d("***", "onRestoreInstanceState"); }
4.数据传递
不同Activity之间的数据传递,一般使用intent作为“信使”,一个intent对象一般由两部分构成,一是“目的地”,二是消息内容,“目的地”时必须的,内容是可选的。
发送方:
//创建信使(已加入“地址”)Intent intent=new Intent(CurrentActivity.this,OtherActivity.class);//创建消息内容Bundle bundle=new Bundle();bundle.putBoolean("Booleankey",true);bundle.putString("Stringkey","value");bundle.putSerializable("person", new Person());intent.putExtra("key",bundle);/**//也可以不用Bundle这个中介,直接把信息写在intent中intent.putExtra("Booleankey",true);intent.putExtra("Stringkey", "value");intent.putExtra("person", new Person());**///跳转至目的地ActivitystartActivity(intent);
接收方
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); Intent intent=getIntent(); Bundle bundle=intent.getBundleExtra("key"); String Stringkey=bundle.getString("Stringkey"); Boolean Booleankey=bundle.getBoolean("Booleankey"); Person person=bundle.getSerializable("person"); /** //如果信息直接搭载在Intent上 String Stringkey=intent.getStringExtra("Stringkey"); Boolean Booleankey=intent.getBooleanExtra("Booleankey", true); Person person=intent.getSerializableExtra("person"); **/ }
5.结果返回处理
Activity提供了一种机制,跳转到其他Activity再返回时,可以接收其他Activity返回的值,而无需再start新的当前Activity,eg:
创建两个Activity,在MainActivity中输入数据后单击“下一步”按钮,启动OtherActivity,在OtherActivity收集到数据后,点击“上一步”,回到MainActivity,并传回OtherActivity的数据,覆盖MainActivity的原数据
MainActivity
//跳转页面Intent intent=new Intent(MainActivity.this,OtherActivity.class);//后一个参数为requestCode,用于处理返回结果时判断是从哪个界面返回的StartActivityForResult(intent,0);//处理返回结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==0&&resultCode==RESULT_OK){ //处理从Intent data接收的数据 } }
OtherActivity
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); //准备要回传的数据 Intent resultIntent=getIntent(); resultIntent.putExtra("Stringkey", "value"); setResult(RESULT_OK,resultIntent); //结束当前Activity this.finish(); }
- Android笔记——Activity生命周期与数据传递
- Android学习笔记——Activity之间的数据传递
- Android学习笔记——Activity之间传递数据
- Android基础学习笔记-Activity开启与数据传递
- Android 笔记-Fragment 与 Activity之间传递数据
- Android笔记Fragment与Activity之间传递数据
- Android笔记Fragment与Activity之间传递数据
- Android 笔记-Fragment 与 Activity之间传递数据
- Android学习笔记——Activity生命周期
- Activity生命周期及数据传递
- android——Activity与Fragment生命周期
- ym——Android从零开始(12)(Activity传递返回参数+生命周期+横竖屏+保持临时数据)(新)
- 6、Activity生命周期、Activity间数据传递
- Android-Activity与Fragment之间传递数据
- Android activity与service传递数据
- android Activity数据传递onActivityResult与setResut
- Android-Activity生命周期笔记
- Android笔记Activity生命周期
- eclipse笔记 快捷键
- eclipse快捷键整理
- 用Python玩数据-笔记三
- 数组
- React组件之间传值
- Android笔记——Activity生命周期与数据传递
- PHP汉字转拼音函数
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- UIButton 防止多按钮同时按下
- Linux下FTP服务器搭建
- QT Sn 2
- .properties 文件的读写
- 偏函数
- hadoop0.20 sqoop1.2搭建