Android Service(本地服务)

 Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、 ContentProvider),它跟Activity的级别差不多,但不能页面显示只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的,例如,一个service可能处理网络 事物,播放音乐,执行文件I/O,或与一个内容提供者交互,所有这些都在后台进行。 
 我们一定要知道的是这里Service的后台运行并不是子线程。Service的运行是在主线程中进行的,只是它没有界面显示而已,它的耗时操作同样需要开启子线程,否者会跟Activity一样出现ANR(application not response–程序没有响应)。 
 我们要知道的是主线程的内容包括UI和后台。只要程序中的UI或后台其中一个在跑,程序都算是在运行状态。
1.布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.zking.g150831_android22.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动服务"
        android:onClick="start"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止服务"
        android:onClick="stop"/>
</LinearLayout>

2.布局页面java代码public class MainActivity extends AppCompatActivity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this,MyServices.class); } public void start(View view) { //传值给服务 intent.putExtra("text","哈哈呵呵");
//启动本地服务
 startService(intent); } public void stop(View view) { //手动停止服务 stopService(intent); }}
3.注册本地服务
public class MyServices extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("哈哈","onBind");
        return null;
    }

    @Override
    public void onCreate() {
        Log.i("哈哈","onCreate");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //接收从activity传过来的值
        String text=intent.getStringExtra("text");
        Log.i("哈哈","onStartCommand"+text);
        new MyThread(startId).start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.i("哈哈","onDestroy");
        super.onDestroy();
    }

    class  MyThread extends  Thread{
        private int startId;
        public MyThread(int startId){
            this.startId=startId;
        }
        @Override
        public void run() {
            super.run();
            for (int i = 0; i < 10; i++) {
                Log.i("哈哈","i="+i);
                SystemClock.sleep(1000);
            }
            //自动停止服务
            //当第一个线程执行完毕,则会停止服务
//            stopSelf();
//当有多个参数是就要带参数
 stopSelf(startId);
        }
    }
}

4.清单文件配置在application下面加上
<!--exported,可以被其他组件启动-->
        <service android:name=".MyServices"
            android:exported="true">
        </service>


 







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值