`
天天向上1989
  • 浏览: 418238 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

【转】Service如何关闭启动自己的Activity

 
阅读更多

今天在编写Android程序的时候,遇到这个问题。通过百度和google的搜索结果,总结出以下方法:
方法一:
public class mService extends Service {
//保存在service中的Activity对象
private static mActivity m;
//启动服务
static void startservice(Context c){
m=(mActivity)c;
Intent iService=new Intent(c,mService.class);
iService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.startActivity(iService);
}
//关闭服务
static void stopservice(Context c){
Intent iService=new Intent(c,mService.class);
iService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
c.stopService(iService);
}
……
//在mService中关闭mActivity
m.finish();
}

public class mActivity extends Activity {

// private MediaPlayer mMPlayer;
/*
* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
……
//启动mService
mService.startservice(mActivity.this);
……
//停止mService
mService.stopservice(mActivity.this);

}
}

方法二:
主要包括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) {
super.onCreate(savedInstanceState);
((MyApp)getApplication()).setInstance(this);
……
}
}
3. 在service中取回实例
public class MyService extends Service {
MyServiceActivity myActivity;
@Override
public void onCreate() {
super.onCreate();
setForeground(true);
android.os.Debug.waitForDebugger();
myActivity = ((MyApp)getApplication()).getInstance();
……
}
}

分享到:
评论

相关推荐

    service中启动activity

    通常,Service启动Activity是通过发送意图(Intent)来实现的。 **一、Service启动Activity的基本流程** 1. **创建Intent**: 首先,你需要在Service中创建一个Intent对象,指定要启动的Activity类名。例如: ```...

    Android利用Intent启动和关闭Activity

    ### 一、Intent启动Activity #### 1. 显式启动 显式启动是通过Intent明确指定要启动的Activity的类名。创建Intent时,你需要在构造函数中传入当前Activity(`this`)和目标Activity的Class对象,如下所示: ```...

    Activity与Service之间通信

    Service的启动,Activity与Service之间数据传递,Binder利用bindService实现Service传递数据给Activity,Activity的成员Broadcast实现Service传递数据给Activity

    Service与多个Activity交互

    1. **启动Service:** Activity可以通过startService()方法启动一个Service,Service会在后台持续运行,直到stopSelf()或stopService()被调用。 2. **绑定Service:** 使用bindService()方法,Activity可以与Service...

    Activity绑定Service(Kotlin)

    本教程将重点讲解如何在Kotlin环境中实现Activity与Service的绑定、启动、解绑以及关闭过程。 1. **Service的基础概念** Service是Android系统中的一个关键组件,它在后台运行,不提供用户界面。Service可以用来...

    Android-Service与Activity传值

    在`Activity`中启动`Service`,通常使用`startService()`方法,需要传入一个`Intent`对象,`Intent`中可以携带数据。例如: ```java Intent intent = new Intent(this, MyService.class); // 如果需要传递数据,...

    通过aidl service调用activity

    4. 从Service启动Activity: 通常,我们不建议直接在Service中启动Activity,因为这可能引发用户界面问题。然而,如果确实需要,可以通过发送意图(Intent)来启动Activity。在Service中: ```java Intent intent...

    安卓开发观察者模式应用-一个service通知多个activity更新ui的实现

    在给定的场景中,我们将讨论如何利用观察者模式来实现一个Service通知多个Activity更新UI的功能。 首先,我们需要理解Service和Activity之间的交互方式。在Android中,Service是后台运行的组件,而Activity是用户...

    android多个activity和一个service通信

    在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...

    Service向Activity传值(kotlin)

    当我们启动或绑定Service时,可以使用Intent对象将数据传递给Service。同样,Service也可以通过Intent返回结果到Activity。首先,在Service中创建一个BroadcastReceiver,用于接收发送的数据,并在适当的时候(例如...

    service之service传递数据给Activity

    在Android应用开发中,Service是后台运行的一种组件,它可以在用户界面关闭或者应用不处于前台时继续执行任务。Service主要用于长时间运行的操作,如播放音乐、网络通信等。然而,Service与Activity之间的通信是必不...

    android service 通过broadcast通知activity

    本主题将深入探讨如何使用Service以及BroadcastReceiver来实现特定的功能:当Service检测到某个函数的状态变化时,通过Broadcast发送通知,进而启动一个新的Activity。 首先,让我们了解`Service`。在Android中,...

    Activity和Service

    在Android开发中,Activity和Service是两个非常重要的组件,它们各自承担着不同的职责,但都是应用程序运行不...开发者需要熟练掌握如何启动、管理Activity以及如何启动和绑定Service,以实现应用程序的各种功能需求。

    Service 启动与停止

    2. bindService(): 这种方式启动的Service会执行onBind()方法,主要用于客户端(如Activity)和服务端(Service)之间的绑定交互。当所有客户端都解绑后,系统会自动停止Service。 三、Service生命周期 1. onCreate...

    activity service 数据交互

    启动Service时,可以在Intent中添加额外的数据,Service通过onStartCommand()方法获取这些数据。同样,Service可以通过startActivityForResult()或startActivity()向Activity发送Intent,传递结果数据。 2. **...

    android ActivityManagerService 源码分析----Activity管理

    "Android ActivityManagerService 源码分析----Activity 管理" Android ActivityManagerService 是 Android 系统中负责管理 Activity 生命周期的核心组件之一。它提供了一个 ArrayList mHistory 来管理所有的 ...

    Android Service与Activity交互

    本示例"Android Service与Activity交互"旨在演示如何在Service启动后,通过线程进行异步操作,并在完成特定任务后,通过发送广播(Broadcast)通知Activity来更新用户界面。 首先,我们需要创建一个Service,通常在...

    Service与Activity的通信

    在Android应用开发中,`Service`和`Activity`是两个重要的组件,它们分别负责后台长时间运行的任务和服务以及用户界面的交互。本示例探讨的是如何实现`Service`与`Activity`之间的有效通信,确保`Service`能及时更新...

    初识 Service(三) 演示:Service给 Activity传递消息

    在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行,即使用户界面(UI,如Activity)已经关闭。本篇我们将深入探讨如何在Service与Activity之间进行交互,尤其是Service如何向...

Global site tag (gtag.js) - Google Analytics