第一行代码Android-------Activity

来源:互联网 发布:用java编写一个计算器 编辑:程序博客网 时间:2024/05/22 00:05

活动Activity

一:创建并注册活动


有两种方法,需要注意:任何Activity都需要在AndroidManifest.xml中注册。

方法一:

在eclipse中选择package----右键----new---other----Android—

--AndroidActivity,一路next,只需填写Activity类名和对应的布局名即可。

 

方法二:

1.建立一个类继承Activity,并复写onCreate方法。

2.建立一个Android xml

3.setContentView(R.layout.activity_second);将xml和activity

关联起来。

4. 在AndroidManifest.xml中注册该Activity:

<activity

         android:name="com.example.csdn_asynctask.MainActivity"

  </activity>

 如需指定该Activity为主Activity,需在<activity>标签之间加上:

 <intent-filter>

    <actionandroid:name="android.intent.action.MAIN"/>

    <categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>


二:在Activity中


   1. 隐藏标题栏

         requestWindowFeature(Window.FEATURE_NO_TITLE);

2.使用Toast

      Toast.makeText(SecondActivity.this,"image successfully !", Toast.LENGTH_LONG).show();

       参数一:Toast要显示的上下文环境,Activity本身就是上下文

       参数二:Toast要显示的文字

       参数三:Toast显示的时间长短

3.创建menu:

  1.在res—menu建立main.xml,(根标签是<menu>)输入:

   <item android:id = “@+id/add_item” android:title = “Add” />

    <item android:id = “@+id/remove_item” android:title =

“Remove” />

      2. 重写:onCreateOptionMenu(Menu menu){

   getMenuInflater().inflate(R.menu.main,menu);

   return true;

}

返回true:允许将创建的菜单显示出来。

      3. 重写onOptionsItemSelected(MenuItem item){

   Switch(item.getItemId()){

case  R.id.add_item:

Toast.maketText(this,“click add”,Toast.LENGTH_SHORT); 

Break;

}

}

通过item.getItemId()获取被点击的item菜单

4.销毁Activity

   点击back按钮或者调用finish();方法


三:多个Activity跳转之Intent


   1. 显式Intent

      分为以下步骤:

      1.1 创建Intent:

Intent intent = new Intent(FirstActivity.this, Second-

Activity.class);

参数一:启动活动的上下文

参数二:要启动的目标活动

      1.2 启动Activity

startActivity(intent);

2.隐式Intent.

  2.1 隐式Intent启动Activity

      1. 创建一个带action的intent:

         Intent intent = new Intent(“com.bupt.MY_ACTION”);

      2. 给Intent添加category,也可以不添加,系统会默认添加一个:

         intent.addCategory(“com.bupt.MY_CATEGORY”);

      3. 在AndroidManifest.xml里,需要启动的Activity标签之间

嵌入:

<intent-filter>

<action android:name = “com.bupt.MY_ACTION” />

<category android:name = “android.intent.category.

DEFAULT” /> <!—这个category是必须的-->

               <category android:name = “com.bupt.MY_CATEGORY”/>

</intent-filter>

        通过这三部就可以用隐式Intent启动Activity了。

  2.2 隐式Intent启动其他程序的活动

     和隐式Intent启动Activity一样,需要指定特定的action和data

     如:启动一个网页:

     1. Intent intent  = newIntent(Intent.ACTION_VIEW);

     2. intent.setData(Uri.parse(“http://www.baidu.com”));

        Uri.parse将一个字符串解析成Uri对象

     3. startActivity(intent);

     还可以在<intent-filter>中指定<data>标签,让Activity与

Intent紧密连接起来。如:<dataandroid:scheme=”http” />

打电话:

1. Intent intent =new Intent(Intent.ACTION_DIAL);

2.intent.setData(Uri.parse(“tel:10086”));

3.startActivity(intent);

3.启动Intent并携带数据

   在FirstA中发送数据

   String data_value = “this is a test string”;

   Intent intent = new Intent(FirstA.this, SecondA.class);

   intent.putExtra(“data_key”, data_value)

   startActivity(intent);

   在SecondA中接收数据:

   Intent intent = getIntent();

   String data_value = intent.getStringExtra(“data_key”);

4.返回数据给上一个Activity

   1. 在FirstA里触发intent

   Intent intent = new Intent(FirstA.this, SecondA.class);

  startActivityForResult(intent, 1); // param 2: request code

  2. 在SecondA中将计算结果反回

  Intent intent = new Intent();// 这个Intent只为传递数据

  Intent.putExtra(“result”, “this is Result”);

  setResult(RESULT_OK, intent); //专门用于向上一个活动返回数据

  finish(); // 销毁当前活动

  3. 在FirstA重写onActivityResult接收返回结果

onActivityResult(intrequestCode,int resultCode,Intent data){

switch(requestCode){

  case 1 :

  if(resultCode == RESULT_OK) //取出data里的数据

  break;

}

}

 

四. Activity的生命周期


概述:Android用任务(Task)管理Activity,一个任务是存放在栈里的活动集合。默认时,每当创建新活动都会入栈,并处于栈顶;按下back或者finish()时,栈顶活动会出栈,前一个入栈的活动重新处于栈顶;系统总是显示处于栈顶的活动给用户。

 

活动(Activity)有四个状态:

1.运行态:栈顶

2.暂停态:非栈顶,但可见

3.停止态:不在栈顶,且不可见

4.销毁态:从返回栈移除后

 

活动生命周期:

1.onCreate    onDestory  : 完整生命周期

2.onStart    onStop    :可见生存期

3.onResume   onPause   :前台生存期

4.onRestart

 

如果先启动AActivity,再启动BActivity,这时AActivity被回收了,在BActivity按下back或finish,会重新调Aactivity的onCreate方法,这时AActivity的数据会丢失。有一个方法可以再销毁AActivity前保存其数据,并在Aactivity的onCreate方法中进行恢复。

Activity回收前会调用onSaveInstanceState(BundleoutState),将临时数据保存在ousState中。

onCreate(BundlesaveInstanceState)方法中saveInstanceState一般为null,当调用了onSaveInstanceState(Bundle outState)时,saveInstanceState就存有outState的数据,可进行恢复。

 

五. 活动的启动模式:

1.standard(默认):每启动一个新的Activity就会在返回栈入栈,并处于栈顶,系统不在乎这个Activity是否在栈中或栈顶,每次都会创建该活动新实例。

2.singleTop:启动活动时,如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不再创建新实例。

3.singleTask:整个应用程序上下文只有一个实例。每次启动活动,系统先在返回栈中检查是否存在该活动的实例,如果发现,则直接使用它,并把他之上的所有活动统统出栈。,如果没有,则创建新活动。

4.singleInstance:会启动一个新的返回栈来管理这个活动

 

最佳实践:

1.创建BaseActivity基类,定义List<Activity>将addActivity(),

removeActivity(),finishAllActivity()方法写在里面

2.让各个Activity集成BaseActivity,自动完成addActivity等功能。

0 0
原创粉丝点击