androidactivity的通信
1. android activity间通讯,跳转回主activity时总会刷新,如何才能不刷新
正常的回退操作不会对activity刷新。除非你在onresume,或onrestart等方法中进行了界面操作,因为跳转回activity是,会执行onresume或onrestart->onstart()->onresume()生命周期。
当然,除此之外还有其他多种可能,要看你的代码而定,如调用startActivityforresult进行跳转,
在接收onactivityresult()方法中处理了ui.
还有可能你进行跳转后,你的主activity被回收了,你返回的是一个新的Activity,这和你的activity设置有关。
2. Android 如何实现Activity与Activity之间持续通信。
java">XXXService
{
publicstaticfinalStringACTION_MESSAGE="message";
onStartCommand(xxx){
//yourlogicalxxx
sendBroadcastReceiver(newIntentFilter(ACTION_MESSAGE))
}
}
XXXActivity{
BroadcastReceiverreceiver=newBroadcastReceiver{
onReceive(context,intent){
if(XXXService.ACTION_MESSAGE.equals(intent.getAction())){
doSomething();
}
}
}
onCreate(){
//xxx
registerReceiver(receiver,newIntentFilter(XXXService.ACTION_MESSAGE));
}
onPause(){
unreigsterReceiver(receiver);
}
publicvoiddoSomething(){
xxx;
}
}
3. 安卓,两个正在运行的activity之间如何通信
用Bundle 或者Intent的时候带参数过去,也可以用一个类进行通信
4. Android中activity与service的通信问题,绑定service不能用!pass掉
如果你的设计中服务时单独的进程那这种只能绑定,,而且这种是做聊天应用的普遍做法,好处多多,但是你非要说绑定麻烦那你就只做成同一个进程的本地服务了,
这样只需要注册回调就可以了。
至于你说的全局静态变量很不推荐,一是很多地方使用更改以后出了问题根本没办法找到错误尤其是多线程操作情况,并且跨进程这全局静态变量也是没办法跨进程访问的
5. android 四大组件是怎么通讯的
底层采用tcp/ip协议通讯,各个模块之间是弱耦合
6. android两个activity之间怎么传递数据
Activity之间是没有办法直接传递数据的。Android的设计原则是,用Intent在不同的Activity和进程之间进行通信,但是通常来讲,Intent中只能存入基本数据类型和系统默认支持的比如Uri之类的。那么对于用户自己定义的数据结构是无法直接用Intent来传送的,如果想要通过Intent来传递自定义数据,可以让数据结构实现Parcelable接口,这样就可以把数据放入Intent。但是Intent的传送效率也不是很高,特别是当传递一些如Bitmap的大数据,用Intent传递超过500K的Bitmap,就会造成Framework层的Java Binder挂掉,结果就是传递不成功。
这点可以算成是Android的一个弊端,没有很好的解决方案。能做到的就是尽量设计的时候注意,尽量让Activity之间共享基本数据类型。
Android本身的应用中也深受其害,可以看到有很多应用程序的源代码中的主要的类在三千行以上的不在少数,比如Browser中的BrowserActivity有四千多行;Mms中的ComposeMessageActivity也有四千多行,等等。为什么一个类会如此之大,就是因为它们是程序的主页面,是业务的核心逻辑所在,里面也控制着很多的其他的数据结构,而又无法与另外的Activity共享,所以就只能在一个Activity里面做所的事情。
7. Android activity与fragment之间通信的好的方法有哪些
在fragment里面有个重写的onAttach方法,可以引用到对应的父Activity。另外,可以用接口实现他们之间的数据交互,还可以写成公共静态方法,直接用类名调用。需要灵活处理。
8. Android 进程间通信的几种实现方式
Android 进程间通信的几种实现方式
主要有4种方式:
这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。
主要实现原理:
由于应用程序之间不能共享内存。为了在不同应用程序之间交互数据(跨进程通讯),AndroidSDK中提供了4种用于跨进程通讯的方式进行交互数据,实现进程间通信主要是使用sdk中提供的4组组件根据实际开发情况进行实现数据交互。
详细实现方式:
Acitivity实现方式
Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。 在android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。
IntentcallIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:12345678");
startActivity(callIntent);Content Provider实现方式
Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)
应用程序可以利用Content Provider完成下面的工作
1. 查询数据
2. 修改数据
3. 添加数据
4. 删除数据
Broadcast 广播实现方式
广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。
Service实现方式
常用的使用方式之一:利用AIDL Service实现跨进程通信
这是我个人比较推崇的方式,因为它相比Broadcast而言,虽然实现上稍微麻烦了一点,但是它的优势就是不会像广播那样在手机中的广播较多时会有明显的时延,甚至有广播发送不成功的情况出现。
注意普通的Service并不能实现跨进程操作,实际上普通的Service和它所在的应用处于同一个进程中,而且它也不会专门开一条新的线程,因此如果在普通的Service中实现在耗时的任务,需要新开线程。
要实现跨进程通信,需要借助AIDL(Android Interface Definition Language)。Android中的跨进程服务其实是采用C/S的架构,因而AIDL的目的就是实现通信接口。
总结
跨进程通讯这个方面service方式的通讯远远复杂于其他几种通讯方式,实际开发中Activity、Content Provider、Broadcast和Service。4种经常用到,学习过程中要对没种实现方式有一定的了解。
