• Service与BoardcastReceive


    开发service需要两个步骤:

    1.定义一个继承Service的子类

    2.在AndroidMainfest。xml文件中配置该Service。

    Service与Activity都是从Context派生出来的,都可调用Context里定义的如getResource()、getContentResolver()等方法

    生命周期方法:

    IBinder onBind(Intent intent):该方法是必须实现的方法。返回一个IBinder的对象,应用程序可以通过该对象与Service通信

    Void onCreat():第一次被创建后将立即回调该方法

    Void onDestory:被关闭之前调用该方法

    void onStartCommand(Intent intent, int flags,int startId):每次客户端调用startService(Intent)方法启动该Service是都会回调该方法。

    boolean onUnbind(Intent intent):当该service上绑定的所有客户端都断开连接时将会回调该方法

    public class FirstService extends Service
    {
        // 必须实现的方法
        @Override
        public IBinder onBind(Intent arg0)
        {
            return null;
        }
        // Service被创建时回调该方法
        @Override
        public void onCreate()
        {
            super.onCreate();
            System.out.println("Service is Created");
        }
        // Service被启动时回调该方法
        @Override
        public int onStartCommand(Intent intent, int flags, int startId)
        {
            System.out.println("Service is Started");
            return START_STICKY;
        }
        // Service被关闭之前回调
        @Override
        public void onDestroy()
        {
            super.onDestroy();
            System.out.println("Service is Destroyed");
        }
    }

    如果希望Service组件做某些事情,只需要在onCreate()或onStartCommand()方法中定义相关业务代码

    在AndroidMainfest.xml中配置:

    <!--配置一个Service组建-->
    
    <service android:name=".FristService">
    
    </service>

    在Android系统中运行Service有如下两种方式:

    1.通过Context的startService()方法:访问者与service之间没有关联,即使访问者退出了,Service也仍然运行。

    2.通过Context的bindService()方法:访问者与service绑定在一起,访问者一旦退出,Service也就终止了。

    第一种方式:

    public class MainActivity extends Activity
    {
        Button start, stop;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // 获取程序界面中的start、stop两个按钮
            start = (Button) findViewById(R.id.start);
            stop = (Button) findViewById(R.id.stop);
            // 创建启动Service的Intent
            final Intent intent = new Intent(this , FirstService.class);
            start.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View arg0)
                {
                    // 启动指定Service
                    startService(intent);
                }
            });
            stop.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View arg0)
                {
                    // 停止指定Service
                    stopService(intent);
                }
            });
        }
    }

    如果Service与访问者之间需要进行方法调用或交换数据,则应该使用bindService()和unbindService()方法启动、关闭Service。

    Context的bindService()方法的完整方法签名为:bindService(Intent service,ServiceConnection conn,int flags):

    service:该参数通过Intent指定要启动的Service。

    conn:该对象用于监听访问者与Service之间的连接情况。当成功连接时回调onServiceConnected(ComponentName name,IBinder service)方法:断开时回调:onServiceDisconnected(ComponentName name)方法、

    注:当调用者主动通过unBindService()方法断开与Service的连接时,ServiceConnection对象的 onServiceDisconnected(ComponentName name)方法不会被调用。

    flags:指定绑定时是否自动创建Service(如果Service还未创建)。该参数可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)。

    当开发Service类时,该Service类必须提供一个IBinder onBind(Intent intent)方法,在绑定本地service的情况下,onBind(Intent intent)方法返回的IBinder对象将会传给ServiceConnection对象里onServiceConnected(ComponentName name,IBinder service)方法的service参数,这样实现通信。

    sagacity_shen 战战兢兢,如履薄冰。
  • 相关阅读:
    MyBatis:分页的实现
    Mybatis之配置文件
    Java之创建线程的方式四:使用线程池
    Java之创建线程的方式三:实现Callable接口
    Java之线程通信的应用:经典例题:生产者/消费者问题
    Java之线程通信的方法
    Java之解决线程安全问题的方式三:Lock锁
    Java之同步方法处理实现Runnable接口的线程安全问题
    Java之同步方法处理继承Thread类的线程安全问题
    01 while 循环输入1 2 3 4 5 6 8 9 10
  • 原文地址:https://www.cnblogs.com/sagacity-shen/p/5741420.html
Copyright © 2020-2023  润新知