• 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启动模式之singleInstance

android:Activity启动模式之singleInstance

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

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

android:Activity启动模式之singleInstance


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

只有一个实例,并且这个实例独立运行在一个activity任务栈中,这个task只有这个实例,不允许有别的Activity存在下面我们通过一个实例来了解singleInstance启动模式

在手机上的运行结果如下图

\

layout布局文件为

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"><button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity1"></button><button android:id="@+id/button2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity2"></button><button android:id="@+id/button3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity3"></button></linearlayout>

分别为三个按钮添加点击事件,点击后分别打开对应的Activity.三个Acitivy大同小异。很容易区分,只不过Activity2是singleInstance启动模式 其它两个为默认的启动模式(standard)

 

MainActivity(Activity1).class

 

package com.example.activitysingleinstance;

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 MainActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity1");
		//在日志中输出栈ID
		Log.d("SingleInstance", "Activity1的栈ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}

}

Activity2.class
package com.example.activitysingleinstance;

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 Activity2 extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity2");
		//在日志中输出栈ID
		Log.d("SingleInstance", "Activity2的栈ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}
	//如果调用这个方法就在日志中输出信息
	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		Log.d("SingleInstance", "Activity2调用onNewIntent");
	}

}
Activity3.class
package com.example.activitysingleinstance;

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 Activity3 extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity3");
		//在日志中输出栈ID
		Log.d("SingleInstance", "Activity3的栈ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}

}
最后不要忘记在AndroidManifest.xml中配置Activity2和Activity3的信息
   <activity android:launchmode="singleInstance" android:name="com.example.activitysingleinstance.Activity2"></activity>
        <activity android:name="com.example.activitysingleinstance.Activity3"></activity>
现在我们把它部署到手机上。

按照这个打开顺序。

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

我们看看在日志中的输出情况

\

分析:启动Activity1,创建一个Activity栈,ID=17.然后打开Activity2,因为Activity2为SingleInstance启动模式,这个实例要独自运行在一个栈中,我们会发现Activity2又新建了一个Activity栈,ID=18.然后再打开Activity3,进入ID=17的栈中,再打开Activity1继续进入ID=17的栈中。我们再次打开Activity2发现已经栈中已经有了Activity2的实例,不会创建新的实例,但会调用其onNewIntent方法。

具体栈的情况如下图

\

需要按几次返回能回到主界面呢?聪明的你知道了把~那你也就理解了singleInstance启动模式

·4次~

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

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

  • android:Activity启动模式之singleInstance

相关文章

  • 2017-05-26centos7 系统cache的一例故障及解决
  • 2017-05-26Android中ContentProvider组件数据共享
  • 2017-05-26Linux主机网络流量监控ifstat
  • 2017-05-26Android 中间人攻击
  • 2017-05-26生日星座自动匹配,生日星座匹配
  • 2017-05-26「视频直播技术详解」系列之五:延迟优化,
  • 2017-05-26Android网络编程(一)HTTP协议原理
  • 2017-05-26硅谷商城4--显示购物车商品,硅谷商城4--购物车
  • 2017-05-26Android常用学习网站,android
  • 2017-05-26近年RFC文档专题及对应编号 选编 (持续更新)

文章分类

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

最近更新的内容

    • android button的操作
    • 修改Android系统关机动画,android关机动画
    • 4.4.1 ContentProvider初探
    • Android 指纹认证,android指纹认证
    • android:giavity和layout_gravity的区别
    • React-Native系列Android——Native与Javascript通信原理(二)
    • Android 手机卫士--设置界面&amp;功能列表界面跳转逻辑处理,android卫士--界面
    • 用原生VideoView进行全屏播放时的问题,videoview全屏播放
    • Andriod中Style/Theme原理以及Activity界面文件选取过程浅析
    • Android--数据库数据显示至屏幕

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

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