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>
    

    点击下载源码

  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5356365.html
Copyright © 2011-2022 走看看