Activity传递返回参数+生命周期+横竖屏+保持临时数据

来源:互联网 发布:卫生部 疾病数据 编辑:程序博客网 时间:2024/05/04 02:10

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!


前言

我们要讲如果在关闭了第二个Activiy的时候将参数返回给第一个Activity。以及非常重要的Activity生命周期,还有就是实战中经常遇到的开发问题解决方案。


Activity间传递数据打开一个activity关闭之后,返回数据

Activity1

[java] view plaincopyprint?
  1. public void open(View v){  
  2.            Intent intent = newIntent(this,OtherActivity.class);  
  3.            //requestCode :请求码(区分请求的来源)  
  4.            startActivityForResult(intent, 100);  
  5.     }  
  6. protected void onActivityResult(intrequestCode, int resultCode, Intent data) {  
  7.            //TODO Auto-generated method stub  
  8.            super.onActivityResult(requestCode,resultCode, data);  
  9.            if(requestCode== 100 && resultCode == 200 && data != null){  
  10.                   String info =data.getStringExtra("info");  
  11.                   et_info.setText(info);  
  12.            }  

Activity2:

[java] view plaincopyprint?
  1. public void close(View v){  
  2.            String info =et_info.getText().toString();  
  3.            Intent data = new Intent();  
  4.            data.putExtra("info", info);  
  5.            //resultCode 结果码(区分返回的结果)  
  6.            setResult(200, data);  
  7.              
  8.            //关闭Activity  
  9.            finish();  
  10. }  


Activity生命周期

完整生命周期

  onCreate()  

  --> onStart()

  --> onResume()

   可以在手机上看见activity

  ---> onPause()

  --> onStop()

   看不见了

  ---> onDestory()

   销毁了


前台生命周期

  onstart()  ---> onStop()之间进行切换

  onCreate() --> onStart() --> onResume()

   现在有一个activity完全覆盖

  onPause()  ----> onStop()

   如果上面的activity关闭

  onRestart() ---> onStart() --> onResume()

   

可视生命周期

   onResume()  ---> onPause()之间进行切换

  onCreate() --> onStart() --> onResume()

   现在有一个activity没有完全覆盖

  onPause()

   如果上面的activity关闭

  onResume()


临时数据

临时数据:应用程序出现异常。我们需要保存的数据。

[java] view plaincopyprint?
  1. //保存临时数据  
  2.    @Override  
  3.    protected void onSaveInstanceState(Bundle outState) {  
  4.            // TODO Auto-generated method stub  
  5.            super.onSaveInstanceState(outState);  
  6.            outState.putInt("page"88);  
  7.     }  
  8.      
  9.    //用来恢复数据  
  10.    @Override  
  11.    protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  12.            // TODO Auto-generated method stub  
  13.            super.onRestoreInstanceState(savedInstanceState);  
  14.            int page = savedInstanceState.getInt("page");  
  15.            Log.i("i","page:"+page);  
  16. }  

横竖屏问题

ctrl+ F12 可以让模拟器横竖屏切换

竖屏---》横屏

先杀死一个Activity,再创建一个Activity

横屏---》竖屏

先杀死一个Activity,再创建一个Activity,

再杀死一个Activity,再创建一个Activity

原因:android的键盘导致

如果要变成一样:

[html] view plaincopyprint?
  1. <activity  
  2.            android:label="@string/app_name"  
  3.            android:name=".MainActivity"  
  4.            android:configChanges="keyboardHidden">  

此时会创建一个Activity实例

我不想创建。

[html] view plaincopyprint?
  1. <activity  
  2.            android:label="@string/app_name"  
  3.            android:name=".MainActivity"  
  4.            android:configChanges="keyboardHidden|orientation">  

此时不会创建实例

我想横屏和竖屏显示不一样。

[html] view plaincopyprint?
  1. //当切屏幕的时候触发  
  2.     public voidonConfigurationChanged(Configuration newConfig) {  
  3.            // TODO Auto-generated method stub  
  4.            super.onConfigurationChanged(newConfig);  
  5.            int orientation = newConfig.orientation;  
  6.            //竖屏  
  7.            if(orientation ==Configuration.ORIENTATION_PORTRAIT){  
  8.                   setContentView(R.layout.main);// 切换视图  
  9.            }else{  
  10.                   setContentView(R.layout.other);  
  11.            }  
  12. }  


事件

//触摸事件

onTouchEvent()

//键盘按下

onKeyDown()

//键盘弹起

onKeyUp()

//键盘长按

onKeyLongPresss()

//键盘重复点击

onKeyMultiple()


必须知道的问题~!(面试经常问到)

activity返回时,如何返回数据?  

Activity1

1.startActivityForResultintent // 请求

3.onActivityResult() // 回调拿到反馈数据

Activity2:

2.setResult()//反馈

activity生命周期有哪些状态,有哪些方法?

onCreate();

onStart();-------------

onResume();

onPause();

onStop(); ---------onReStart();

onDestroy();

异常情况下保存临时数据的方法?      

onSaveInstanceState(); // 保存数据

onRestoreInstanceState(); // 读取数据

常用事件有哪些?

onKeyUp();

onKeyDown();

onKeyLongPress();

onKeyMultiple();

onTouchEvent();

0 0