MainActivity 通过 startActivityForResult 启动 MainActivity2 ,同时传递一个 Bundle 对象给 MainActivity2 ,在 MainActivity2 中通过 getIntent 获取到传递过来的 Bundle ,进而得到 MainActivity 传递过来的String 数据并打印。
在 MainActivity2 中通过 setResult 设置需要传递给 MainActivity 的 Bundle 数据,在 MainActivity 的 onActivityResult 函数中就可以得到相关的 Bundle 数据。
每一个Android应用都有一个 Application 对象,这个 Application 会贯穿整个Android应用,在其中定义的变量,它的生命周期也是和整个应用的生命周期一样。
在 MainActivity 中定义了一个 伴生变量 ,它相当于 Java中的静态变量 ,而在 MainActivity2 中可以获取此静态变量,并对其进行修改。
通过 Fragment 的 setArguments(bundle) 实现 Activity 想 Fragment 传值。
通过 onAttach(activity: Activity) 方法获得 activity 实例,直接调用 activity 中的方法获得数据。
Service 的 onBind 方法需要返回一个 Binder 对象,而这个对象在 ServiceConnectiononServiceConnected 中可以获取,从而实现 Service 和 Activity 之间的通信。
startService 时,传入参数 intent 可以携带部分参数给 Service ,我们可以在 Service 的 onStartCommand 方法中得到 startService 传递过来的 intent 数据。
在service中持有 callback 接口,并在binder中定义方法得到service的实例。activity中实现 ServiceConnection ,通过绑定启动service,这样会回调 ServiceConnection 接口的 onServiceConnected 方法,从而得到service实例,对service中的 callback 进行赋值,在service中可进行耗时 *** 作并见数据通过callback接口,传递给activity进行其他 *** 作。
除了上面说的常用方法外,还有很多其他方法,比如广播机制,事件总汇(eventbus)等。
方法一:
public class mService extends Service {
//保存在service中的Activity对象
private static mActivity m;
//启动服务
static void startservice(Context c){
m=(mActivity)c;
Intent iService=new Intent(c,mServiceclass);
iServicesetFlags(IntentFLAG_ACTIVITY_NEW_TASK);
cstartService(iService);
}
//关闭服务
static void stopservice(Context c){
Intent iService=new Intent(c,mServiceclass);
iServicesetFlags(IntentFLAG_ACTIVITY_NEW_TASK);
cstopService(iService);
}
……
//在mService中关闭mActivity
mfinish();
}
public class mActivity extends Activity {
// private MediaPlayer mMPlayer;
/
(non-Javadoc)
@see androidappActivity#onCreate(androidosBundle)
/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
superonCreate(savedInstanceState);
……
//启动mService
mServicestartservice(mActivitythis);
……
//停止mService
mServicestopservice(mActivitythis);
}
}
方法二:
主要包括3部分
1 定义application类,这个类可以保存获取activity实例,记得manifest中加入android:name="MyApp"
public class MyApp extends Application{
private MyServiceActivity myActivity;
public void setInstance(MyServiceActivity instance){
myActivity = instance;
}
public MyServiceActivity getInstance(){
return myActivity;
}
}
2 在activity中保存实例
public class MyServiceActivity extends Activity {
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
((MyApp)getApplication())setInstance(this);
……
}
}
3 在service中取回实例
public class MyService extends Service {
MyServiceActivity myActivity;
@Override
public void onCreate() {
superonCreate();
setForeground(true);
androidosDebugwaitForDebugger();
myActivity = ((MyApp)getApplication())getInstance();
……
}
}
可以把跳转界面的intent写到你的service里面 就是说 你开启了service以后 就会直接跳转到 activity
如满意记得采纳,如果有其他问题也可点我名字向我求助
答题不易,
如果没有回答完全,请您谅解,
请采纳最快回答的正确答案!!谢谢!
Service通知Activity修改UI(UI动态更新)有两种方式:
①通过service发送广播通知activity修改UI的内容;
②通过Handler进行传递值更新。
一、首先来说第一种,通过service发送广播通知activity修改UI的内容。(结合例子讲解,计时器)
说明:Activity与通过startService方法启动的Service之间是无法直接进行通信的,但是借助BroadcastReceiver可以实现两者之间的通信。
1实现思路:1)后台Service每隔1秒发送广播通知时间已发生变化;
2)UI层(Activity)通过BroadcastReceiver接收到广播,更新显示的时间。
2关键技术点:Service的应用、BroadcastReceiver的应用
3关于注册广播,有两种方式:
①xml中配置:
<receiver android:name="UITimeReceiver"> <intent-filter> <action android:name="comxcTIME_CHANGED_ACTION"/> </intent-filter> </receiver>
②代码:
registerReceiver(BroadcastReceiver receiver,IntentFilter filter);
可以实现一个Observer,在activity里监听这个Observer,service需要给activity发送信号时,就主动去通知这个Observer,activity捕获到信号后,去更新UI
或者也可以写一个BroadcastReceiver service发 activity接收处理
以上就是关于Android四大组件之Activity(2)组件间通信全部的内容,包括:Android四大组件之Activity(2)组件间通信、android service 怎么结束activity、怎么从一个service跳转到activity等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)