activity启动模式

Android开发指南-框架主题-基础知识

谁都会走 提交于 2019-12-05 04:44:03
应用程序基础 关键类 Activity Service BroadcastReceiver ContentProvider Intent Android应用程序使用Java做为开发语言。aapt工具把编译后的Java代码连同其它应用程序需要的数据和资源文件一起打包到一个Android包文件中,这个文件使用.apk做为扩展名,它是分发应用程序并安装到移动设备的媒介,用户只需下载并安装此文件到他们的设备。单一.apk文件中的所有代码被认为是一个应用程序。 从很多方面来看,每个Android应用程序都存在于它自己的世界之中: 默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程,而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。 每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。 默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,并加以权限设置,使得应用程序的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的应用程序所访问。 使两个应用程序共有同一个用户ID是可行的,这种情况下他们可以看到彼此的文件。从系统资源维护的角度来看,拥有同一个ID的应用程序也将在运行时使用同一个Linux进程,以及同一个虚拟机。

Android app开发常用知识列举

故事扮演 提交于 2019-12-04 18:25:37
在Activity可见时进行页面刷新,即处于Activity栈顶,当然,这种刷新操作 可以在onStart,onResume,onRestart,onNewIntent+singleTask中,但最好的位置是 onResume, 其他方式可能会造成窗体泄露 Service的两种启动方式,startService和bindService,根据启动方式的不同,当然也有一种称为复合方式startService+bindService,Service销毁的方式不同,startService可以做 app退出后 的后台服务,但bindService不行,startService+bindService也可以做后 app退出后 的后台服务,但app退出时必须unbind,反过来bindService+startService不能做 app退出后 的服务 建议在Activity增加一个变量activityIsActivity来判断当前Activity是否处于活动状态,Activity::onResume和Activity:onPause中改变其值,防止在无界面时发生窗体泄露问题。 在Activity的onWindowFocusChanged的方法中监听焦点的改变 使用 InputMethodManager 退出键盘最灵活的方式是 InputMethodManager imm =

【Android基础】Activity的启动模式(android:launchMode)

两盒软妹~` 提交于 2019-12-04 04:31:20
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: 1. 如何决定所属task “standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,除非intent包括参数FLAG_ACTIVITY_NEW_TASK。 如果提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到别的task里。 “singleTask”和”singleInstance”总是把activity作为一个task的根元素,他们不会被启动到一个其他task里。 此话描述不正确, 感谢 liuluxu1989 提出。 这篇博文写的比较简单, 也没有任何图示, 不便大家理解, 建立大家直接看Dev guide. 或者下面这篇博文: http://marshal.easymorse.com/archives/2950 2. 是否允许多个实例 “standard”和”singleTop”可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例; “singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。

Activity的4种加载模式及Intent标识

梦想与她 提交于 2019-12-04 04:30:01
Activity的生命周期已经了解了,那么Activity是怎么运作的呢? Activity栈:(Task) 每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。 当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。 如果用户使用后退按钮返回的话,或者前台的Activity结束,在栈上的Activity将会移上来并变为活动状态。 一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。 Activity的4种状态: 活动的 :当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。 暂停 :在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。 当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下

Android开机启动Activity或者Service方法

主宰稳场 提交于 2019-12-04 04:29:23
这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下面把自己的经验分享给大家。 Android开机启动Activity或者Service方法 【原理】 当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的application必须具有捕获该广播的权限,下面请看具体步骤: 【步骤一】首先要有一个用于开机启动的Activity或者Service,这里以系统自己创建的最简单的Activity为例进行讲解。 package com.billhoo.study; import android.app.Activity; import android.os.Bundle; public class BootTestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle

android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法

我与影子孤独终老i 提交于 2019-12-03 01:31:07
android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法 如题。 这个问题困扰了我一下午,查了好多资料都不太跟这个问题沾边,但还是查到了。。记录下来,为了自己,也为了方便别人。 这个问题是因为在AndroidManifest.xml中,你的启动activity中加了android:launchMode="singleTask",将这行 代码 去掉就可以了。如下图: 关于为什么会引起这个问题,主要还是不太了解activity的launchMode,查了下资料,感觉楼主整理的不错,就引用过来,如下文: 转自 http://hi.baidu.com/amauri3389/blog/item/a54475c2a4b2f040b219a86a.html 参见: http://mypyg.iteye.com/blog/919643 http://marshal.easymorse.com/archives/2950 http://blog.csdn.net/infsafe/article/details/5666964 Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法

Activity 四种启动模式

浪尽此生 提交于 2019-12-03 01:30:56
standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。 singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。 singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如

standard(默认), singleTop, singleTask和 singleInstanc

一世执手 提交于 2019-12-03 01:30:41
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。 singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A

android当中taskAffinity属性与launchMode相关

与世无争的帅哥 提交于 2019-12-03 01:29:53
一、本文尝试解释以下问题 1. Activity被启动之后放在哪个任务栈当中?与哪些因素有关? 2. Activity的四种启动模式对Activity的启动有哪些影响? 3. 在Activity中使用startActivityForResult(intent, REQUESTCODE);和onActivityResult() 是否与被启动的 Activity 的 launchMode 有关?如果有关,有什么关系? 二、 Activity 被启动之后放在哪个任务栈当中?与哪些因素有关? 1. 基本论断: Activity 启动之后对应的任务站与 Activity 的两个属性 taskAffinity 和 allowTask- Reparenting 有关 2. 原理 (1) 任务栈的标识 ---- 任务栈名称的确定 任务栈的标识是由任务栈的名称来确定的,例如,在通常情况下用包名标识一个唯一任务栈,清单文件如下: <? xml version = "1.0" encoding = "utf-8" ?> < manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.example.musictest01" android:versionCode = "1" android

Activity的生命周期

匿名 (未验证) 提交于 2019-12-03 00:27:02
Activity作为Android的四大组件之首,生命周期当然是重中之重了。 虽然都是老生常谈的面试题了。。。但是被面试官问到了,还是不会的话, Activity―其实我更愿意喊它一声“界面”呗。我们在手机上看到的一个窗口,就是它啊。 它的生命周期也分为两种情况: 第一:正常情况下的生命周期 第二:非正常情况下的生命周期:比如屏幕翻转或者内存不足,被kill掉了。 一、 Activity有哪些生命周期方法 先来过滤一下,一共有哪些生命周期的方法吧! onCreate :表示窗口正在被创建,比如加载layout布局文件啊(setContentView)。 所以我们可以在这个方法中,做一些初始化的操作。 onStart :表示Activity正在被启动,即将开始,此时的窗口已经可见了,但是还没有出现在前台,所以无法和用户进行交互。也就是说此时的窗口正处在 不可见―>可见 的过程中。 onRestart :表示窗口正在重新启动。在什么场景下会调用这个呢?比如:从A页面进入B页面,然后点击BACK键(或者自己的返回上一页的按钮)回到A页面,那么就会调用A页面的onRestart方法了。。(当前也牵扯到A和B页面的其他生命周期方法的调用,这个我们后面再详细说明) 再比如:点击HOME键回到桌面,然后通过点击任务栏或者点击应用图标再次进入A页面,都可以触发调用这个方法 onResume