Activity函数
onCreateOptionsMenu(Menu menu)
加载menu
onOptionsItemSelected(MenuItem item)
menu item点击事件处理
finish()
销毁活动
onSaveInstanceState(Bundle bundle)
活动在被回收前调用。bundle用于绑定数据,会在活动调用onCreate()时传入
活动生命周期
返回栈 Back Stack
Android是使用任务(Task)管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈就是返回栈。先进后出。
活动状态
- 运行状态:活动处于栈顶,处于运行状态,一般系统不回收。
- 暂停状态:不在栈顶,但仍然可见。此时活动仍然存活,一般系统也不回收。
- 停止状态:不在栈顶,并完全不可见。仍保存活动相应状态和成员变量,内存吃紧时可能被系统回收。
- 销毁状态:从栈中移除后变为销毁状态,系统回收。
活动生命周期
- onCreate():活动第一次被创建时调用。
- onStart():活动由不可见变为可见时调用。
- onResume():在活动准备好和用户进行交互时调用。此时是活动肯定是运行状态。
- onPause():系统准备去启动或恢复另一个活动时调用。通常在这个方法中释放资源或保存关键数据。这个方法执行一定要快,不然会影响新的栈顶活动的使用。
- onStop():活动变为完全不可见时调用。与onPause()的区别是,如果启动的新活动是对话框式的活动,则onPause()执行,onStop()不执行
- onDestroy():活动在销毁之前调用,之后活动变为销毁状态。
- onRestart():活动由停止转为运行状态之前调用,即活动重新启动。
活动启动模式
- standard:默认的。每次启动活动都会创建一个新的实例放入栈顶。
- singleTop:如果栈顶已经是该活动实例,直接使用它。如果没有则创建新实例。
- singleTask:如果栈中已经有活动的实例,则直接使用它,并把它上面的所有活动出栈。如果没有则创建新实例。
- singleInstance:创建这个模式的活动时,会启用一个新的返回栈来管理该活动。可用于不同程序间共享同一个活动实例。
启动活动设置
AndroidManifest.xml中设置
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Intent 启动另外一个活动、传递数据
显式intent
Intent intent = new Intent(MainActivity.this, NormalActivity.class);
startActivity(intent);
隐式intent
隐式Intent不仅可以启动自己程序内的活动,还可以启动其他程序的活动。
AndroidManifest.xml文件中activite/category中值
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
则启动此activite的intent如下:
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
startActivity(intent);
调用外部程序活动
隐式Intent不仅可以启动自己程序内的活动,还可以启动其他程序的活动。下面是启动浏览器打开百度的代码:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
同时,我们可以在标签中配置标签,用于更精准地指定当前活动能够相应什么类型的数据。例如:
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
data的值可以有5种:android:scheme/android:host/android:port/android:path/android:mimeType
传递数据
intent.putExtra(“”,data);把数据加入intent.
intent.getStringExtra(“”)、intent.getIntExtra(“”)、intent.getBooleanExtra(“”);得到intent中的数据
返回数据给上一个活动
活动1启动活动2时,使用startActivityForResult(intent,1);方法,其中的1需要是唯一值。
活动2在销毁时,调用setResult(RESULT_OK,intent);方法,把intent中的数据返回给活动1,intent实例化时调用空参数的构造函数。
活动1重写onActivityResult(int requestCode,int resultCode,Intent intent);函数获取活动2销毁时发送的数据。requestCode是启动活动时的请求吗,就是上面的1。resultCode是返回数据时传入的处理结果,一般有RESULT_OK和RESULT_CANCELED两个值。intent就是返回的数据。
Toast
Toast.makeText(FirstActivity.this, "you clicked button1", Toast.LENGTH_SHORT).show();