zoukankan      html  css  js  c++  java
  • 安卓服务(Service)的两种开启方式以及服务的生命周期

    安卓中服务的开启方式

    一:採用start的方式开启服务

    调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy()
    特点:服务被开启后不会反复开启,仅仅会调用onStart(),服务仅仅会被停止一次。
    二:採用bind的方式开发服务
    调用函数:bindService(Intent…)->onCreate()->onBind()->onUnBind()->onDestroy();
    特点:绑定不会调用onStart()[过时了]和onStartCommand()方法。

    两种服务的差别:
    start方式开发服务,一旦服务开启跟调用者就没有不论什么关系了。比方我们的服务是在Activity中调用开启的,当Activity关闭的时候,服务不会关闭。
    bind方式开启服务,调用者没了。服务也会关闭,能够理解为同生共死。

    对于start开启服务的方式比較简单。重点解说bind的方式。

    样例:
    1.布局里面设置三个button
    demo截图
    2.为button设置监听事件。有好几种方式。
    3.处理事件。

    当点击绑定的时候:

        /*绑定的创建方式
        */
        Intent intent = new Intent(this, MyService.class);
        bindService(intent, conn, BIND_AUTO_CREATE);

    conn是自己实现的功能类,继承自ServiceConnection。
    完整代码例如以下:

    public class MainActivity extends ActionBarActivity {
        private MyConn conn;
        private Call c;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);//Call相似中间人的功能。
        }
        public void bind(View v){
            conn = new MyConn();
            Intent intent = new Intent(this, MyService.class);
            bindService(intent, conn, BIND_AUTO_CREATE);
        }
    
        public void unbind(View v){
            unbindService(conn);
            c = null;
        }
        /*
         * 调用服务里的方法
         */
        public void call(View v){
            c.callMethodInService();
        }
    
        private class MyConn implements ServiceConnection{
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                System.out.println("调用服务里面的方法");
                c = (Call) service;
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
    
            }
        }
    }
    

    service代码例如以下:

    public class MyService extends Service {
    
        @Override
        public IBinder onBind(Intent intent) {
            System.out.println("服务被成功绑定了");
            return new Call();
        }
    
        @Override
        public void onCreate() {
            System.out.println("onCreate");
            super.onCreate();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            System.out.println("onstartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            System.out.println("ondestroy");
            super.onDestroy();
        }
    
        public void methodInService(){
            Toast.makeText(this, "methodInService", 0).show();
        }
    
        public class Call extends Binder{
            public void callMethodInService(){
                methodInService();
            }
        }
    }
    

    布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.servicelife.MainActivity" >
        <Button android:onClick="bind"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="start"/>
    
        <Button android:onClick="unbind"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="end"/>
    
        <Button android:onClick="call"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="调用服务里的方法"/>
    
    
    </LinearLayout>
    

    点击下载源码

  • 相关阅读:
    Xaml下
    Xmal
    ItemTemplate
    spring aop
    Struts2
    jsp的标签库
    数据库连接池
    request初探
    kubectl 命令大全
    win10常见问题归总
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5356365.html
Copyright © 2011-2022 走看看