intent传递对象

Activity的启动流程分析

匆匆过客 提交于 2020-04-03 10:31:40
Activity是Android应用程序的四大组件之中的一个,负责管理Android应用程序的用户界面,一般一个应用程序中包括非常多个Activity,他们可能执行在一个进程中。也可能执行在不同的进程中。 我们主要通过启动在不同进程中的Activity,来分析Activity的启动流程及AMS对Activity的管理逻辑。 有两个应用程序App1和App2。在App1的Activity A中点击button 启动 App2中的Activity B。 通过分析以上ActivityB的启动过程来了解AMS对Activity的管理逻辑。 步骤1:Activity A告诉AMS服务准备启动Activity B 步骤2:AMS服务处理并通知Activity A所在的进程pause Activity A,Activity A所在的进程处理完毕之后。通知AMS服务Activity A已经完毕pause工作。 步骤3:Activity B所在的进程没有启动,AMS服务首先启动一个新的进程。新的进程启动完毕之后。通知AMS服务进程启动完毕。 步骤4:AMS服务通知新的进程来启动Activity B。新的进程启动Activity B完毕之后。通知AMS服务Activity B启动完毕。 在分析Activity启动流程之前我们先简介下应用进程和AMS服务通信方法。AMS服务和应用进程间属于不同的进程

android面试题整理

半世苍凉 提交于 2020-04-03 04:31:41
以下是整理的一些android面试题,希望对大家有用。 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity, activity 是Context的子类,同时实现了window.callback和keyevent.callback, 可以处理与窗体用户交互的事件. 我开发常用的的有ListActivity , PreferenceActivity 等…如果界面有共同的特点或者功能的时候,还会自己定义一个BaseActivity. 2. 请描述一下Activity生命周期。 生命周期描述的是一个类 从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法.. 在这个过程中 会针对不同的生命阶段会调用不同的方法 Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:oncreate ondestroy onstop onstart onresume onpause 其实这些方法都是两两对应的,onCreate创建与onDestroy销毁; onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause; 这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢? 答案就是:在Activity被onStop后,但是没有被onDestroy

android onNewIntent

为君一笑 提交于 2020-03-27 10:19:56
pendingIntent字面意义:等待的,未决定的Intent。   pendingIntent对象,使用方法类的静态方法 :       getActivity(Context, int, Intent, int) -------> 跳转到一个activity组件、      getBroadcast(Context, int, Intent, int)------>打开一个广播组件     getService(Context, int, Intent, int) --------> 打开一个服务组件。   分别对应着Intent的3个行为和参数有4个,比较重要的事第三个和第一个,其次是第四个和第二个。可以看到,要得到这个对象,必须传入一个Intent作为参数,必须有context作为参数。   pendingIntent是一种特殊的Intent。主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的。pendingIntent执行的操作实质上是参数传进来的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。 主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等等。 intent英文意思是意图

IntentFilter,PendingIntent

落花浮王杯 提交于 2020-03-27 06:08:16
1.当Intent在组件间传递时,组件如果想告知Android系统自己能够响应那些Intent,那么就需要用到IntentFilter对象。 IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只讲自己关心的Intent接收进行处理,IntentFilter实行“白名单”管理,几只列出组件乐意接受的Intent,但IntentFilter只会过滤隐式Intent,显示的Intent会直接传送到目标组件,Android组件可以有一个或多个IntentFilter,每个IntentFilter之间相互独立,只需要其中一个验证通过即可。除了用户过滤广播的IntentFilter可以在代码中创建外,其他的IntentFilter必须在AndroidManifest.xml文件中进行声明。 2.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int) , getBroadcast(Context, int, Intent, int) , getService(Context, int, Intent, int) 分别对应着Intent的3个行为,跳转到一个activity组件、打开一个广播组件和打开一个服务组件。 参数有4个,比较重要的事第三个和第一个,其次是第四个和第二个。可以看到

Intent详解

喜你入骨 提交于 2020-03-21 06:34:36
1、Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。Intent这个英语单词的本意是“目的、意向、意图”。 Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。 activity、service和broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content Provider本身就是一种通信机制,不需要通过Intent。我们来看下面这个图就知道了: 如果Activity1需要和Activity2进行联系,二者不需要直接联系,而是通过Intent作为桥梁。通俗来讲,Intnet类似于中介、媒婆的角色。 2、对于向这三种组件发送intent有不同的机制: 使用Context.startActivity() 或 Activity.startActivityForResult(),传入一个intent来启动一个activity。使用 Activity.setResult()

Android应用程序组件介绍

廉价感情. 提交于 2020-03-19 19:01:02
应用程序组件是 Android 应用程序的基本构建单元。每个组件是系统进入你的应用程序的不同入口点。不是所有的组件对于用户都是实际上的入口点,有些是互相依赖的,但是每个组件都有特定的作用——每个都是唯一的构建单元,这些构建单元定义你应用程序的全部行为 有四种不同类型的应用程序组件。每种都有不同的用处并且有不同的生命周期。生命周期定义了他们是怎样被创建和销毁的。 四类不同的应用程序组件分别有: Activities 一个 Activity 代表一个单独的拥有用户界面的屏幕。比如,一个邮件应用程序可能拥有一个显示新邮件的列表的 Activity ,一个编写邮件的 Activity ,一个读邮件的 Activity 。虽然这些 Activity 一起工作,但是他们是相互独立的。因此一个不同的应用程序也可以启动这些 Activity 中的任何一个(如果邮件应用程序允许的话)。比如一个摄像头应用程序为了能让用户分享一张图片它能启动邮件应用程序中的编写邮件的 Activity 。 一个 Activity 是由 Activity 类的子类来实现的。 Services 一个 Service 组件是运行在后台的一个进程,这个进程处理一个长时间的操作或者是一个远程调用。一个 Service 不需要提供一个用户界面。比如,一个 Service 可以在用户运行一个不同程序的同时在后台播放音乐

跨进程通信之Activity篇

半城伤御伤魂 提交于 2020-03-18 17:01:56
某厂面试归来,发现自己落伍了!>>> 方法一:使用ComponentName实现跨进程 ComponentName componentName=new ComponentName("com.example.vvgool","com.example.vvgool.MainActivity"); intent.setComponent(componentName); startActivity(intent); 需要注意的是:在调用启动activity的时候这样不修改所调用的应用是没问题的,但是如果调用应用的非启动activity问题就来了,错误提示:需要权限,所以说在调用应用为非启动activity的时候需要在androidManifest.xml中所在声明activity中加入android:exported="true"这样就可以了。 方法二:指定Action实现跨进程 修改androidManifest.xml ,在需要调用activity中加入 <intent-filter> <action android:name="main"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> 这里action 中的name你就自己写吧。。 调用代码

Android四大组件之广播

烂漫一生 提交于 2020-03-15 20:54:59
广播接收者(Broadcast Receiver)有两种:普通广播(Normal Broadcast)和有序广播(Ordered Broadcast) 1,普通广播 Context.sendBroadcast( new Intent() ); 完全异步,可以在同一时刻被所有接收者接收到,消息传播的效率比较高; 缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播; 2,有序广播 Context.sendOrderedBroadcast( new Intent() ); 按照接收者的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级越高,取值范围-100~100;也可以调用IntentFilter对象的setPriority()进行设置),被接受者依次接收广播。 前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就无法获取到广播; 前面的接收者可以将处理结果通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,通过Bundle bundle =getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。 生命周期: 一个广播处理完onReceive(

安卓activity之间进行数据传输

*爱你&永不变心* 提交于 2020-03-10 19:36:46
一:单个对象传输 (1)基本数据传输(String Int) Intent intent = new Intent ( this , NewActivity . class ) ; intent . putExtra ( "name" , "android" ) ; intent . putExtra ( "version" , 9 ) ; startActivity ( intent ) ; 在另外一个NewActivity.java的onCreate获取 protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ) ; setContentView ( R . layout . activity_new ) ; Intent intent = getIntent ( ) ; String name = intent . getStringExtra ( "name" ) ; int ver = intent . getIntExtra ( "version" , 0 ) ; Log . d ( TAG , " name =" + name + " version=" + ver ) ; } (2)Bundle集装箱数据传输 传递方: Intent

intent.putExtra()方法参数详解

倖福魔咒の 提交于 2020-03-08 17:10:56
【putExtra("A",B)中,AB为键值对,第一个参数为键名,第二个参数为键对应的值。顺便提一下,如果想取出Intent对象中的这些值,需要在你的另一个Activity中用getXXXXXExtra方法,注意需要使用对应类型的方法,参数为键名】 要不我举个例子吧,,大家注意注释的地方哈,源码在下面。 来建第一个Activity:MyIntent public class MyIntent extends Activity { /*声明控件对象*/ private EditText et1, et2; private Button bt; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /*取得控件对象*/ et1 = (EditText) findViewById(R.id.et1); et2 = (EditText) findViewById(R.id.et2); bt = (Button) findViewById(R.id.bt); /*为按钮绑定监听器*/ bt