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 数据类型找到最合适的组件来处理意图
================================================================
生命周期
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手机 屏幕横竖屏切换