Activity

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模式则会单独生成新栈


三、活动的应用--最佳实践

1、知晓当前在哪一个活动
   新建一个BaseActivity继承Activity,重写onCreate( )方法,使该BaseActivity 成为项目中所有活动的父类,通过改写的方法打印出每个界面所在的类名
    onCreate( ){  super.onCreate( ); Log.d(" tag", getClass( ).getSimpleName( ));     )
2、随时随地退出程序
   新建一个类活动管理器,通过List暂存Activity,可添加、可移除所有活动
public class ActivityCollector{  public static List<Activity> activities= new ArrayList< >( );
      public static void addActivity( Activity){ activities.add( activity) ;}
......  removeActivity( ){  //同理 }
......  finishAll( ){     for( Activity activity: activities){if(!activity.isFinishing( ) ){      activity.finish( );} ...

  修改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){....} ... 































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芒果-橙

谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值