1、注册
在AndroidManifest中 <application> 添加标签<activity> </activity> </application>
属性 android:label=" " //标题栏的内容
<intent-filter> 程序的主活动
2、隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE) ; 写在 setContentView()方法前
3、Toast 提醒
Toast.makeText(Context, Text ,length).show(); //length-------Toast.LENGTH_SHORT(_LONG) 是代表弹出来显示的时间长短
4、Menu (自动隐藏)
在res 下新建menu 文件夹(new Folder),新建xml文件
菜单项:<item :id=" " :title=" " />
主类文件下: public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main ,menu); //menu是Menu对象 return true; //可见 }
点击事件: onOptionsItemSelected(Menu item) { }
5、销毁一个活动
finish(); //比如按钮点击事件
一、活动的生命周期
1、返回栈:Android 使用Task来管理活动 ;一个任务就是一组存放在栈里的活动的集合 ;当启动一个新的活动,会入栈,即处于栈顶位置
2、活动状态 <1> 运行状态:位于返回栈的栈顶 <2>暂停状态 :不处于栈顶但仍可见 <3> 停止 :不处于~~,完全不可见,可能会被回收 <4> 从返回栈中移除
3、活动的生存期:
<1>onCreate():初始化操作,第一次创建时执行
<2>onStart():活动由不可见变为可见时调用
<3>onResume(): 活动准备好和用户交互时调用,位于栈顶
<4>onPause(): 系统准备去启动或恢复另一个活动时,方法中将消耗CPU的释放,保存关键数据
<5>onStop(): 活动完全不可见时调用~ 启动的新活动是对话框活动,该方法不执行,o~P~()会执行
<6>onDestroy():活动被销毁之前调用,之后销毁状态
<7>onRestart(): 活动由停止变为运行状态之前调用,重启动
完整生存期:onStart()、onDestroy()
可见生存期:onStart()、onStop()
前台生存期:onResume()、nPause()
(对话框可直接在注册文件中声明) <activity android:theme="@android:style/Theme.Dialog">
4、恢复活动被回收时的数据丢失
二、活动的启动模式
1、standard:默认
每当启动一个新的活动,就会在返回栈中入栈,并处于栈顶,系统不会在乎活动是否已在栈中
eg:点击自己界面跳到自己,栈中存在3个相同的Activity实例,此时要退出(返回)要点3次back
2、SingleTop
启动时若发现栈顶已经是该活动则不会创建实例 注册文件:<activity android:launchMode="SingleTop"></>
若两个活动相互跳转循环,仍会重复出现在栈中 (FirstActivity--->SecondActivity----->FA)
3、singleTask
启动时检查栈中是否存在该活动的实例,若有则直接使用,且将其之上的活动全部出栈;若无则出栈 注册文件...
4、singleInstance
启用一个新的栈来管理这个活动,所有应用程序访问该活动都共用同一个栈
同一个应用下的多个Activity都是用这个栈,当指定一个Activity使用singleInstance模式则会单独生成新栈
三、活动的应用--最佳实践
修改BaseActivity, 重写onDestroy ()方法
... onCreate( ) { super.onCreate( );ActivityCollector.addActivity( this); }//当前正在创建的活动 添加到 活动管理器
...onDestroy( ){ super.onDestroy( );ActivityCollector.removeActivity(this); }// 要销毁的活动从 活动管理器 移除
在任意一个地方想要退出,调用方法 ActivityCollector.finishAll( );
3、启动活动的最佳写法---不懂
启动一个新的活动需要传递数据,而又不知要传递什么,,,修改SecondActivity(新的Activity)添加方法
public static void actionStart(Context,String,String data2){
Intent intent=new Intent(context ,SecondActivity.class);
intent.putExtra(" param1",data1);...2
context.startActivity(intent); }
启动该Activity更方便 SecondActivity.actionStart( FirstActivity.this , " data1" ,"data2");
//编写活动时这样写,则方便自己启动Activity,方便他人调用时知道要传递什么数据
四、使用Intent 在活动间穿梭
1、显式Intent ---Intent( Context packageContext ,Class<?> cls); startActivity(Intent Object);
2、隐式(不明确指出我们想要启动哪一活动)通过指定action和category信息,让系统自己分析调用
新构造方法 Intent(“packageNam.actionName”);
在注册文件中指定 <intent-filter> <action android:name=" .."/> <category ..../> </ >
根据系统内置动作响应 --网页 Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.black.com") ); //将网址字符串解析成Uri对象
--电话 ......ACTION_DIAL "tel:10086"
在<intent-filter> 添加 <data >标签,指定响应的数据类型 <data android:scheme=" http"/> ( 当Intent的Data和标签中的内容一致才会响应)
3、传递数据
传递------ intent.putExtra(" keyName" , data) ; // FirstActivity
接收------ Intent intent=getIntent( ); String data=intent.getStringExtra(" keyName" );...getIntExtra( ..); // SecondActivity
4、返回数据给上一个活动
传递: startActivityForResult(intent ,1);// 1为参数 requestCode 唯一 ---FirstActivity
返回: Intent intent= new Intent( );// 仅用来传递数据
intent.putExtra(" " ," ");// --SecondActivity
setResult( RESULT_OK, intent ) ; // 参数resultCode---RESULT_CANCELD向上一个活动返回结果
finish( );
在第二个Activity中若用的不是点击事件,而是Back键 ,则需将以上放在重写方法 onBackPressed( )
因为用startActivityForResult ()方法启动,需重写方法,用于在SecondActivity被销毁之后回调一个活动的onActivityResult( )方法
onActivityResult( ){switch( requestCode) {
case 1: if( resultCode==RESULT_OK){....} ...