曾经的笔记——android的学习笔记(Activity传参、四种启动模式、生命周期、屏幕横竖屏切换)

1、传参

     public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
   
    public void openActivity(View v){
     //Intent intent = new Intent();
     // method 1>
     //intent.setClassName(this, "com.peter.multiactivity.OtherActivity");//设置要激活的组件
     
     //设置要激活的组件
     // method 2>
     //intent.setClassName("com.peter.multiactivity",
     //    "com.peter.multiactivity.OtherActivity");该方法可以跨应用激活Activity
     
     // method 3>
     //intent.setClass(this, OtherActivity.class);
     
     // method 4>
     //intent.setComponent(new ComponentName(this, OtherActivity.class));
     
     //method 5> 
     Intent intent = new Intent(this, OtherActivity.class);
     Log.i("MainActivity", "new Intent(this, OtherActivity.class)");
     
     intent.putExtra("username", "zhengjj");
     intent.putExtra("amount",25000);
     //startActivity(intent);
     startActivityForResult(intent, 100);
    }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  String result = data.getStringExtra("returnData")+"; requestCode="+requestCode+";resultCode="+resultCode;
  Toast.makeText(getApplicationContext(),result, Toast.LENGTH_LONG).show();
  super.onActivityResult(requestCode, resultCode, data);
 }

--------------------------------------------------------------------------------

public class OtherActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_other);
  TextView textView = (TextView)findViewById(R.id.showText);
  Intent intent = getIntent();
  String username = intent.getStringExtra("username");
  int amount = intent.getIntExtra("amount", 30000);
  textView.setText("username="+username+"; amount="+amount);
 }
 
 public void closeActivity(View v){
  Intent intent = new Intent();
  intent.putExtra("returnData", "{'username':'zhengjj','amount':30000}");
  setResult(20, intent);//设置返回数据
  finish();//关闭Activity(关闭窗口)
 }

================================================

启动模式默认是 android:launchMode="standard"

<activity android:name="com.peter.multiactivity.OtherActivity" android:label="@string/other_app" android:launchMode="singleTop" />

我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转,或者夹带其它应用的可复用的Activity。例如我们可能希望跳转到原来某个Activity实例,而不是产生大量重复的 Activity。这样就需要我们为 Activity 配置特定的加载模式,而不是使用默认的加载模式。

Activity 有四种加载模式

[1] standard 模式

这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。

[2] singleTop 模式

如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。

[3] singleTask 模式

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

[4] singleInstance 模式

在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。

 

使用Intent可以激活三种核心组件:活动、服务和广播接收者

意图分为显示意图和隐式意图

显示意图:通过调用setClass()或setComponet()设置组件的意图。给定了调用组件的名称。明确指定了要调用的组件是哪一个组件

  主动关闭Activity,finish(); 而不是等待系统去完成。

隐式Intent:意图对像本身并不知道要传递给哪个组件,至于传递给哪个组件是由Android平台来决定的。==>没有明确指定组件名称的意图,系统会根据所设定的action、category和URI 数据类型找到最合适的组件来处理意图

================================================================

生命周期


曾经的笔记——android的学习笔记(Activity传参、四种启动模式、生命周期、屏幕横竖屏切换)
1、当Activity在屏幕前台时(位于当前任务堆栈的顶部),它处于激活active或运行状态running,它可以响应用户操作;

 2、当Activity上面有另外一个Activity,上面的Activity没有完全覆盖它,或者上面的Activity是透明的,这时下方的Activity仍然对用户是可见的,下方的Activity就处于暂停状态paused。被暂停的Activity仍然对用户可见,并且是存活的状态(它保留着所有的状态和成员信息,并保持和窗口管理器的连接),如果系统处于内存不足时会杀死这个Activity。

3、当Activity完全被另一个Activity覆盖时则处于停滞状态stopping,它仍然保留所有的状态和成员信息,然而对用户是不可见的,所以当它的窗口被隐藏,如果其他地方需要内存,则系统常常会杀死这个Activity。

 

当Activity从一种状态切换到另一种状态是,会调用以下保护方法来通知这种变化。

onCreate(Buddle saveInstanceState)

onStart()   onRestart()   onResume()  onPause  onStop()   onDestroy()

 

参考的Manifest.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.itcast.life"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".PauseActivity" android:theme="@android:style/Theme.Dialog" />
        <activity android:name=".StopActivity" />
    </application>

</manifest>

------------------------------------------------------------------------------------------

Activity的onSaveInstanceState()和onRestoreInstanceState()的方法

这两个方法并不是生命周期的方法,它们不同于onCreate() onPause等生命周期的方法,它们俩不一定会被触发。当应用遇到意外情况(如内存不足,与直接按下Home键)由系统销毁一个Activity时,onSaveInstanceState()会被调用,另外Activity由运行状态进入暂停状态或停止状态也会调用该方法。但是当用户主动销毁一个Activity是,例如在应用中按了返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。一般来说onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

       另外当屏幕的方向发生了改变,Activity会被销毁并且被重新创建,如果你想在Activity被销毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据,可以重写Activity的onSaveInstanceState()和onRestoreInstanceState()的方法。

public class MainActivity extends Activity {
 private String name;
 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
  name = savedInstanceState.getString("name");
  //被重新创建后恢复缓存的数据
  super.onRestoreInstanceState(savedInstanceState);
 }

 @Override
 protected void onSaveInstanceState(Bundle outState) {
  outState.putString("name", "zhengjj");
  //被销毁前缓存一些数据
  super.onSaveInstanceState(outState);
 }

==================================================

屏幕横竖屏切换

参考的例子

http://www.cnblogs.com/zhangkai281/archive/2011/07/06/2099277.html 解决Android手机 屏幕横竖屏切换

你可能感兴趣的:(Activity)