• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android:Activity启动模式之singleTask(一)

android:Activity启动模式之singleTask(一)

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了activity singletask,android singletask,singletask模式,singletask,singletop singletask等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android:Activity启动模式之singleTask(一)


先看一下standard启动模式的说明:

只有一个实例,在同一个应用程序中启动他的时候,若不存在此Activity实例,则会在当前栈顶创建一个新的实例,若存在,则会把栈中在其上的其它Activity实例销毁掉,并调用此实例的OnNewIntent方法,如果实在别的应用实例中启动它,则会新建一个栈,并在该栈中启动这个Activity,然后我在这个Activity实例中再打开新的Activity这个新的实例会在一个栈中

我们首先通过一个实例理解这句:只有一个实例,在同一个应用程序中启动他的时候,若不存在此Activity实例,则会在当前栈顶创建一个新的实例,若存在,则会把栈中在其上的其它Activity实例销毁掉,并调用此实例的OnNewIntent方法

首先在手机上的效果

\

xml布局文件 两个按钮 一个用于打开MainActivity(Activity1),一个用于打开OtherActivity(Activity2)

MainActivity和OtherActivity同时使用这个布局文件,并为其按钮添加点击事件

 

 

MainActivity

 

package com.example.singletop;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//设置标题为Activity1
		setTitle("我是Activity1");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(MainActivity.this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(MainActivity.this,OtherActivity.class));
			break;
		}
	}
}

OtherActivity
package com.example.singletop;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class OtherActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//设置标题为Activity2
		setTitle("我是Activity2");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(OtherActivity.this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(OtherActivity.this,OtherActivity.class));
			break;
		}
	}
	//在此方法中打印是否调用这个方法的日志
	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		Log.d("OtherActivity", "OnNewIntent");
	}
}
至于MainActivity和OtherActivity的区别:

MainActivity是standard启动模式

OtherActivity是singleTask启动模式

在AndroidManifest.xml中MainActivity默认就是standard启动模式

配置一下OtherActivity就好

       <activity android:launchmode="singleTask" android:name="com.example.singletop.OtherActivity"></activity>
我们举个例子。

Activity1->Activity2->Activity1->Activity1->Activity2

在Activity栈中是什么样子呢?

\

为什么是这样呢?聪明的你肯定理解了吧?哈哈~

我们仔细分析一下,当我们打开Activity1,栈中只有(Activity1),当再打开Activity2栈里面为(Activity2,Activity1),再打开Activity1栈里面为(Activity1,Activity2,Activity1),再打开Activity1栈里面仍然是正常的(Activity1,Activity1,Activity2,Activity1),下面是重点了。当我们再打开Activity2时发现栈里面已经有了Activity2了,根据singleTask模式的说明(只有一个实例,在同一个应用程序中启动他的时候,若不存在此Activity实例,则会在当前栈顶创建一个新的实例,若存在,则会把栈中在其上的其它Activity实例销毁掉)

此时会删除栈里面的(Activity1,Activity1)并且调用onNewIntent方法。我们查看一下日志文件

\

的确调用了一次OnNewIntent方法。只需要按两次返回键就能返回到主界面了。

聪明的你理解了吧?至于下半句的分析请看下篇文章

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android:Activity启动模式之singleTask(一)
  • android:Activity启动模式之singleTask(二)

相关文章

  • 2017-05-26MultiTouch————多点触控,伸缩图片,变换图片位置,
  • 2017-05-227.5.1 WebView(网页视图)基本用法
  • 2017-05-26android之仿微信双击放大字体及滑动冲突,文本显示不全,android放大字体
  • 2017-05-26[android] 手机卫士手机定位的原理,android卫士
  • 2017-05-26[Android]数据篇,android数据
  • 2017-05-26XamarinAndroid 自动绑定View变量,xamarinandroidview
  • 2017-05-26android开发中遇到的问题汇总【九】
  • 2017-05-26NDK中使用pthread多线程中自己写的一个BUG,ndkpthread
  • 2017-05-26安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth
  • 2017-05-26Android--Activity在跳转时携带数据

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 事件分发
    • Android中MotionEvent的来源和ViewRootImpl
    • Android解析编译之后的所有文件(so,dex,xml,arsc)格式
    • 学习《第一行代码》使用实机测试所遇问题(一),《第一行代码》
    • ActiveRecord模式整理,activerecord模式
    • 安卓GreenDao框架一些进阶用法整理,安卓greendao
    • Android 手机卫士--md5加密过程,android--md5
    • 8.3.1 三个绘图工具类详解
    • Android中SimpleAdapter的使用—自定义列表,自定义simpleadapter
    • 一起来学习Android自定义控件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有