谈谈Android的Service

Service是Android系统中的四大组件之一,它与Activity不同,它是不能与用户交互的。它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。
       
1.Android中的服务没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:
                                 
第一步:继承Service类
                                             public class
MyService extends Service { }
                                 
第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:
                                           
<service android:name=".MyService"
/>
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service
   
2.Service与Activity一样,也有一个从启动到销毁的过程,但Service的这个过程比Activity简单得多。Service启动到销毁的过程只会经历如下3个阶段: 
                             
创建服务      public void onCreate();

开始服务     
public void onStart(Intent intent, int startId);

销毁服务      
public void onDestroy();

 1 MyService.java
 2
 3
 4 package com.example.service;
 5
 6 import android.app.Service;
 7 import android.content.Intent;
 8 import android.os.IBinder;
 9
10 public class MyService extends Service {
11
12     @Override
13     public IBinder onBind(Intent intent) {
14         // TODO Auto-generated method stub
15         return null;
16
17     }
18
19     @Override
20     public void onCreate() {
21         // TODO Auto-generated method stub
22         System.out.println("###onCreate###");
23     }
24
25     @Override
26     public void onDestroy() {
27         // TODO Auto-generated method stub
28         System.out.println("###onDestroy###");
29     }
30
31     @Override
32     public int onStartCommand(Intent intent, int flags, int startId) {
33         // TODO Auto-generated method stub
34         System.out.println("###onStartCommand###");
35         return Service.START_CONTINUATION_MASK;  //继续执行
36     }
37
38 }  
MainActivity.java  

package com.example.service;  

import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;  

import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;  

public class MainActivity extends Activity {
private Button start=null;
private Button stop=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        start=(Button)findViewById(R.id.start);
        stop=(Button)findViewById(R.id.stop);
        this.start.setOnClickListener(new StartOnClickListenerImpl());
        this.stop.setOnClickListener(new StartOnClickListenerImpl());
    }
    private  class StartOnClickListenerImpl implements OnClickListener{  

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            MainActivity.this.startService(new Intent(MainActivity.this,MyService.class));
        }  

        private  class StoptOnClickListenerImpl implements OnClickListener{  

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                MainActivity.this.startService(new Intent(MainActivity.this,MyService.class));
            }  

        }  

    }  

} 

注意不要忘了AndroidManifest.xml

谈谈Android的Service

时间: 2024-11-09 01:50:56

谈谈Android的Service的相关文章

访何红辉:谈谈Android源码中的设计模式

最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计模式,以及近期Android开发中的一些热点话题. 受访嘉宾介绍: 何红辉(@MrSimp1e),前友盟Android工程师,活跃于国内各大技术社区,热爱开源,热爱技术,热爱分享.Android开源库 AndroidEventBus . Colorful 作者, 开发技术前线 站长,<Android源码

android 远程Service以及AIDL的跨进程通信

在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv

android的Service的实例

package com.android.service; import android.app.IntentService;import android.content.Intent; public class HelloIntentService extends IntentService{ public HelloIntentService() {        super("HelloIntentService");        // TODO Auto-generated c

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

Android 测试Service的生命周期

1 package com.example.myapp4; 2 3 import android.support.v7.app.ActionBarActivity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.Menu; 7 import android.view.MenuItem; 8 import android.view.View; 9 import android.w

Android之Service通信-(2)

一.Service通过IBinder与Activity进行通信 在Service中进行下载 Service package chuiyuan.lsj.androidjava.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; import android.wi

Android——判断Service是否已经启动

延续百度地图定位的Demo,采用Service来进行百度定位,并且将数据上传到服务器上遇到了一个问题:在真机中使用清理内存来关闭程序的之后,Service会被关闭,但是过几秒中,它又会自动重启:重启就算了,而且再次登陆系统的时候,又会开启一个一样的服务,在LogCat中就会看到每次都获取到两次的定位数据.然后想想是否可以在建立Service之前判断这个服务有没有被创建?只要能做这个判断,那么服务存在我们就不管它,如果不存在则创建,本着这个思路,百度发现可行(Service后台服务创建时最好都要判

Android Web Service学习总结(一)

最近学习android平台调用webWebService,学习了一篇不错的博客(http://blog.csdn.net/lyq8479/article/details/6428288),可惜是2011年时的方法,而不适合现在android4.0之后的android版本,所以通过一番学习和研究,总结如下. web Service简介 通俗的理解:通过使用WebService,我们能够像调用本地方法一样去调用远程服务器上的方法.我们并不需要关心远程的那个方法是Java写的,还是PHP或C#写的:我

如何从python代码中直接访问Android的Service

在Kivy中,通过pyjnius扩展可以间接调用Java代码,而pyjnius利用的是Java的反射机制.但是在Python对象和Java对象中转来转去总让人感觉到十分别扭.好在android提供了binder这个进程间通信的功能,Java中的Service也是基于Binder的C++代码封装来实现进程间通信的,这也为从Python代码中绕开pyjnius直接访问Java代码提供了可能,既然Java的Service是基于C++的封装来实现的,也同样可以在Python中封装同样的C++代码,这篇文