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

转载 2012年03月30日 00:00:14

http://our2848884.blog.163.com/blog/static/14685483420109302018538/

今天在编写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();
                ……
       }
}


相关文章推荐

原创:Android怎么让一个service开机自动启动

Android怎么让一个service开机自动启动 时间过得真快,开学的日子也越来越近了,前段时间都是忙于上一届学员的工作,今天终于有时间坐下来静静的整理上一届授课的方面的知识点了,接下来的日子我会坚...

# Android中Activity四种启动模式和taskAffinity属性详解 #(2原创分享)

activity有四种启动模式,分别为standard,singleTop,singleTask,singleInstance。如果要使用这四种启动模式,必须在manifest文件中标签中的launc...
  • Blumamy
  • Blumamy
  • 2015年02月04日 14:22
  • 534

Activity启动流程源码解析(原创)

Activity启动流程源码解析

# Android中Activity四种启动模式和taskAffinity属性详解 #(5)原创分享

由上述可知,Task是Android Framework中的一个概念,Task是由一系列相关的Activity组成的,是一组相关Activity的集合。Task是以栈的形式来管理的。 我们在操作软...
  • Blumamy
  • Blumamy
  • 2015年02月09日 10:40
  • 337

【原创】PB开发Web Service接口环境搭建及问题解决

工作需要用WebService方式做接口,折腾了半月,走了无数弯路,才初见眉目。为了避免坚守PB开发的老中青同学们以后遇到同样的问题,在此做个简要总结。   ——by nocry115/泥草鞋前言:...

原创:Android应用开发记录-Andorid歌词秀(3)使用的Service的音频播放器

在下文中我们实现的简单的音乐播放功能。 原创:Android应用开发记录-Andorid歌词秀(2)先来一个音频播放器 但是这样的方式在程序退出后播放也会停止,为了解决这个问题,使用的Servic...

【原创】也来探一探Service

零.背景         以前一直没有尝试过service,原因有两个,第一,自己不懂Service,觉得学习起来麻烦,第二因为自己不懂,所以不知道什么时候要用Service什么时候不用Service...

第2章3节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NoteEditor简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需...

第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【原创】Service如何关闭启动自己的Activity
举报原因:
原因补充:

(最多只允许输入30个字)