两个Activity之间传输数据,都有哪些方式
这道题想考察什么
传输数据的方式不止一种,除了常见的intent之外,说出开发中常用的方式。把自己熟悉的方式说得越完整,深度越深越好。
如何作答
- 四大组件之间通信都可以用的intent
- 注册广播接收者可以收到其他Activity发送的广播,广播也是可以携带数据的
- 多个app之间Activity要跨进程通信,contentProvider可以轻松实现
- SharedPreferences 首选项,其实它内部也是文件存储
- 新建本地文件进行读写
- 利用轻量级数据库sqlite
- 文件存储的通信方式都有多线程异步读写的问题,包括SharedPreferences,所以特别敏感的数据慎用。
Context是什么?一个应用有多少个context
这道题想考察什么
Context上下文,学过安卓的都知道,但是context体系化知识,知道的人就未必很多了。这道题能答好,说明对android内核有自己的理解。
细分下来的知识点
- context的概念
- context的类继承结构
如何作答
1、它描述的是一个应用程序环境的信息,即上下文。 2、该类是一个抽象(abstract class)类,Android 提供了该抽象类的具体实现类(ContextIml)。 3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个 Activity,发送广播,接受 Intent,信息,等。4、一个应用 Context 数量=Activity 个数+service 个数+1 个application
activity之间,以及activity和service之间,如何传值,能传图么?
这道题想考察什么
这道题考察常见开发场景中的数据传递具体如何操作。
细分下来的知识点
分情况说明:
- Activity之间
- Activity与service 之间
如何作答
-
Activity 之间的传值:startActivity,通过 Intent 对象的各种 putExtra 方法来进行传递。在第二个 Activity 对象中,可以通过 getIntent() 方法来得到跳转到这个 Activity 的 Intent 对象,然后通过 Intent 对象的各种 getXXExtra 方法来得到我们的传过来的值。
-
Activity 和 service 之间传值:
在 activity 中通过 startService(intent)即可,同样 intent.putStringExtra(),然 后 再 service 中 的 onStart 函 数 中 获 取 该值,this.getIntent(),intent.getString()
在这里我们需要在 Mainfeist 文件中注册这个 service
service 可以从 public int onStartCommand(Intent intent, int flags, int startId)中取出从 activity 中传过来的值。intent.getExtra()获得 bundle 对象,可从中取值。
activity 也可以用 bindService(intent, conn,BIND_AUTO_CREATE);传值,把要传的值绑定在 intent 里,在 service 的 public IBinder onBind(Intent intent) 方法里取得 intent。
Intent 可以传递哪些数据类型
这道题想考察什么
考察你对intent的熟练使用,它能传递什么样的值,什么场景下适合用intent,什么情况下不合适
细分下来的知识点
-
intent的api已经说明了一切,支持基础数据类型,支持数组,支持实现了序列化serialzilable和parcelable的对象。
-
intent作为android组件之间传递数据的通用手段,泛用性很强,但也不是万能的
如何作答
- 简单数据类型
- 数组
- 集合,list , map都可以
- 对象,可以将对象转成json字符串,或者实现java的serializable 或者 android的parcelable进行序列化
- Bitmap也可以传,它本身就是实现了parcelable的.
- 但是在多页面传导中不要使用intent,而应该采用全局化的数据仓库,比如 application类,作为context的始祖,app任何一处都可以获得它,从而拿到其中的数据。