zoukankan      html  css  js  c++  java
  • Android Service与Runnable整合并用

    服务的启动没有Activity,即便是利用Activity带起服务,也会有各看成独立的事件及焦点要处理。

    Service继承自Android.app.Service。

    服务的生态链就先从onCreate()开始(如果有重写的话) ,接着应会进入启动服务onStart(),默认继承的Service类,并不一定要有onStart(),但是一定要重写public IBinder onBind(Intent intent)方法。

     package cn.iimob;


    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;

    public class demo extends Activity {
        private Button btnStartService,btnStopService;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            btnStartService=(Button)findViewById(R.id.btnStartService);
            btnStopService=(Button)findViewById(R.id.btnStopService);
            btnStartService.setOnClickListener(new Button.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //构建 Intent 对象,指定打开对象为 MyService服务
                    Intent i=new Intent(demo.this, MyService.class);
                    //设置新Task的方式
                    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    //以startService 方法启动 Intent
                    startService(i);
                }
            });
            btnStopService.setOnClickListener(new Button.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // 构建 Intent对象,指定关闭的对象为MyService服务
                    Intent i=new Intent(demo.this, MyService.class);
                    
                    //以stopService 方法关闭 Intent
                    stopService(i);
                }
            });
        }
    }

     package cn.iimob;


    import android.app.Service;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.IBinder;
    import android.util.Log;

    /**
     * 
     *  @Project       : servicedemo
     *  @Program Name  : cn.iimob.MyService.java
     *  @Class Name    : MyService
     *  @Description   : 自定义 MyService 类继承 Service 类
     *  @Author        : zh
     *  @Creation Date : 2011-11-3 上午09:49:00 
     *  @ModificationHistory  
     *  Who        When          What 
     *  --------   ----------    -----------------------------------
     *  username   2011-11-3       TODO
     
    */
    public class MyService extends Service {

        /**
         * 创建 Handler 对象,作为进程 传递 postDelayed 之用
         
    */
        private Handler myhandler = new Handler();
        
        /**
         * 为了确认系统服务运行情况
         
    */
        private int intCounter=0;
        
        /**
         * 成员变量 myTasks为Runnable对象,作为Timer之用
         
    */
        private Runnable myTasks=new Runnable() {
            /**
             * 进程运行
             
    */
            @Override
            public void run() {
                // TODO Auto-generated method stub
                
    //递增counter整数,作为后台服务运行时间识别
                intCounter++;
                //以Log 对象在LogCat 里输出Log信息,监看服务运行情况
                Log.i("Run Service", "Counter:"+Integer.toString(intCounter));
                myhandler.postDelayed(myTasks, 1000);
            }
        };
        
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
        
        @Override
        public void onStart(Intent intent,int startId){
            myhandler.postDelayed(myTasks, 1000);
            super.onStart(intent, startId);
            Log.i("Start Service", "onStart");
        }
        
        @Override
        public void onCreate(){
            super.onCreate();
            Log.i("Create Service", "onCreate");
        }
        
        @Override
        public void onDestroy(){
            //当服务结束,删除 mTasks 运行线程 
            myhandler.removeCallbacks(myTasks);
            super.onDestroy();
            Log.i("Destroy Service", "onDestroy");
        }
        
        
    }

     <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical"
        android:layout_width
    ="fill_parent"
        android:layout_height
    ="fill_parent"
        
    >
    <TextView  
        
    android:layout_width="fill_parent" 
        android:layout_height
    ="wrap_content" 
        android:text
    ="@string/hello"
        
    />
    <Button android:text="开始Service" android:id="@+id/btnStartService" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    <Button android:text="终止Service" android:id="@+id/btnStopService" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    </LinearLayout>

     <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package
    ="cn.iimob"
          android:versionCode
    ="1"
          android:versionName
    ="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".demo"
                      android:label
    ="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!-- 创建 Service,给予类的名称  -->
            <!-- 创建 android:exported属情为true,表示此服务可被其他程序访问  -->
            <service android:name=".MyService" android:exported="true" android:process=":remote"></service>
        </application>
        <uses-sdk android:minSdkVersion="8" />

    </manifest> 
  • 相关阅读:
    AQS笔记二 ---- 使用AQS自定义锁
    AQS笔记一 --- 源码分析
    ElasticSearch(二十一)正排和倒排索引
    ElasticSearch(二十)定位不合法的搜索及其原因
    ElasticSearch(十八)初识分词器
    ElasticSearch(十七)初识倒排索引
    还在用 kill -9 停机?这才是最优雅的姿势(转)
    一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
    你真的理解零拷贝了吗?(转)
    关于分布式事务的读书笔记
  • 原文地址:https://www.cnblogs.com/skyblue/p/2234252.html
Copyright © 2011-2022 走看看