Android基础知识_Activity SingleTop模式示例

来源:互联网 发布:大二java课程设计题目 编辑:程序博客网 时间:2024/05/17 07:40

一、示例工程LaunchMode代码

  布局文件activity_main.xml代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity"    android:orientation="vertical" >    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <Button        android:id="@+id/btnStartMainAty"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="启动MainActivity" />        <Button        android:id="@+id/btnStartBAty"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="启动BAty" /></LinearLayout>
  MainActivity.java文件代码如下:
package com.example.launchmode;import org.apache.http.conn.ManagedClientConnection;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends Activity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);/* 使TextView呈现信息: 任务栈ID, 当前Activity的ID(即Activity实例的ID) */textView.setText(String.format("TaskID: %d\nCurrent Activity ID: %s", getTaskId(), toString()));findViewById(R.id.btnStartMainAty).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this, MainActivity.class));}});findViewById(R.id.btnStartBAty).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this, BAty.class));}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
  布局文件activity_baty.xml代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity"    android:orientation="vertical" >    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />    <Button        android:id="@+id/btnStartMainAty"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="启动MainActivity" />        <Button        android:id="@+id/btnStartBAty"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="启动BAty" /></LinearLayout>
  BAty.java文件代码如下:
package com.example.launchmode;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class BAty extends Activity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_baty);textView = (TextView)findViewById(R.id.textView);/* 使TextView呈现信息: 任务栈ID, 当前Activity的ID(即Activity实例的ID) */textView.setText(String.format("TaskID: %d\nCurrent Activity ID: %s", getTaskId(), toString()));findViewById(R.id.btnStartMainAty).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(BAty.this, MainActivity.class));}});findViewById(R.id.btnStartBAty).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(BAty.this, BAty.class));}});}}
  AndroidManifest.xml文件代码如下:
<application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.launchmode.MainActivity"            android:label="@string/app_name"            android:launchMode="singleTop" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity             android:name=".BAty"            android:label="BAty" >        </activity></application>

二、程序运行截图

三、程序描述

  [启动MainActivity],会发现SingleTop模式,TaskID是不会发生改变的。[启动BAty]所使用的任务栈是同一个任务栈(因为TaskID号没有改变),只是实例是不一样的,因为它是BAty的实例。[后退]记录此时的实例MainActivity(注:记录@符后面的数字),[启动BAty],再[启动MainActivity]我们会发现这两个MainActivity的实例是不一样的,[后退],再[后退]可以再次确认这两个MainActivity的实例是不一样的。是什么意思呢?也就意味着在同一个栈里面如果说我们指明Activity的启动模式是SingleTop的话,如果此时这个Activity处于栈顶,那么你只能创建一个实例;如果当前不处于栈顶,会创建新的实例。


0 0
原创粉丝点击