Android四大组件之Activity(2)组件间通信

Android四大组件之Activity(2)组件间通信,第1张

   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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9553437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存