android本地后台服务示例

在android编写Service入门中介绍了android的两种后台服务,本地和远程的。这里用本地服务做了一个模拟定时后台发短信的技术原型。

启动该示例应用的样子:





选择启动:



启动后,可看到ddms logcat日志:



这是操作:启动、停止和退出应用,显示的调试日志信息。模拟后台服务每5秒钟发送一次短信信息。

主要代码,后台服务SmsService:
    package com.easymorse;    import android.app.Service;    import android.content.Intent;    import android.os.Binder;    import android.os.IBinder;    import android.util.Log;    public class SmsService extends Service {        private boolean started;        private boolean threadDisable;        private ServiceBinder serviceBinder = new ServiceBinder();        public class ServiceBinder extends Binder implements ISmsService {            @Override            public boolean isStarted() {                return started;            }            @Override            public void start() {                started=true;                Log.d(“sms.service”, “sms service started.”);            }            @Override            public void stop() {                started=false;                Log.d(“sms.service”, “sms service stopped.”);            }        }        @Override        public IBinder onBind(Intent intent) {            return serviceBinder;        }        @Override        public void onCreate() {            super.onCreate();            Thread thread = new Thread() {                @Override                public void run() {                    while (!threadDisable) {                        try {                            if (started) {                                Log.d(“sms.service”, “send a sms message.”);                            }                            Thread.sleep(1000 * 5);                        } catch (InterruptedException e) {                        }                    }                }            };            thread.start();            Log.d(“sms.service”, “sms service created.”);        }        @Override        public void onDestroy() {            super.onDestroy();            threadDisable = true;            Log.d(“sms.service”, “sms service shutdown.”);        }    }    


前台的Actvity代码,SmsServiceOptions:
    package com.easymorse;    import android.app.TabActivity;    import android.content.ComponentName;    import android.content.Intent;    import android.content.ServiceConnection;    import android.os.Bundle;    import android.os.IBinder;    import android.util.Log;    import android.widget.RadioGroup;    import android.widget.TabHost;    import android.widget.RadioGroup.OnCheckedChangeListener;    public class SmsServiceOptions extends TabActivity {        private RadioGroup radioGroup;        private ISmsService smsService;        private ServiceConnection serviceConnection = new ServiceConnection() {            @Override            public void onServiceConnected(ComponentName name, IBinder service) {                smsService = (ISmsService) service;                if (smsService.isStarted()) {                    radioGroup.check(R.id.radioButtonStart);                } else {                    radioGroup.check(R.id.radioButtonStop);                }                radioGroup                        .setOnCheckedChangeListener(new OnCheckedChangeListener() {                            @Override                            public void onCheckedChanged(RadioGroup group,                                    int checkedId) {                                if (checkedId == R.id.radioButtonStart) {                                    Log.d(“sms.service”, “starting service…”);                                    smsService.start();                                } else {                                    Log.d(“sms.service”, “stopping service…”);                                    smsService.stop();                                }                            }                        });            }            @Override            public void onServiceDisconnected(ComponentName name) {                smsService = null;            }        };        /** Called when the activity is first created. */        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);            this.setTitle(“短信服务器”);            this.bindService(new Intent(“com.easymorse.SmsService”),                    this.serviceConnection, BIND_AUTO_CREATE);            TabHost tabHost = this.getTabHost();            tabHost.setup();            TabHost.TabSpec spec = tabHost.newTabSpec(“服务选项”);            spec.setContent(R.id.Option01);            spec.setIndicator(“服务选项”);            tabHost.addTab(spec);            spec = tabHost.newTabSpec(“服务状态”);            spec.setContent(R.id.Option02);            spec.setIndicator(“服务状态”);            tabHost.addTab(spec);            radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup01);        }        @Override        protected void onDestroy() {            super.onDestroy();            this.unbindService(serviceConnection);        }    }  


另外,不要忘记在配置文件中增加对service的声明,见AndroidManafest.xml:
    <?xml version=”1.0″ encoding=”utf-8″?>    <manifest xmlns:android=”http://schemas.android.com/apk/res/android”        package=”com.easymorse” android:versionCode=”1″ android:versionName=”1.0″>        <application android:icon=”@drawable/icon” android:label=”@string/app_name”>            <activity android:name=”.SmsServiceOptions” 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:name=”.SmsService”>                <intent-filter>                    <action android:name=”com.easymorse.SmsService”></action>                </intent-filter>            </service>        </application>        <uses-sdk android:minSdkVersion=”3″ />    </manifest> 

更多相关文章

  1. Android后台保活套路分析
  2. Android应用程序的快速启动是怎样炼成的
  3. Google Cloud Messaging for Android(安卓)(GCM)已推出,将取代C2D
  4. Android电话监听器
  5. 重看android(二) android启动
  6. 我的Java之路--Android转Java后台
  7. Android学习启动
  8. 模拟器上安装Android(安卓)Market
  9. Android应用启动后自动创建桌面快捷方式

随机推荐

  1. Android(安卓)的消息队列模型
  2. TextView 属性详解
  3. android布局layout中的一些属性
  4. Android(安卓)设置控件是否可见
  5. android开发之设置Edittext密码的方法
  6. Android布局文件中命名空间的解析
  7. Android布局文件中命名空间的解析
  8. Android(安卓)线程优先级设置方法
  9. android 滚动条 相关属性
  10. Android分享文稿 ( by quqi99 )