Android Service(本地服务)

来源:互联网 发布:python join函数 编辑:程序博客网 时间:2024/05/23 21:05
 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大门上边的齿轮滑丝怎么办 国通石油储油卡怎么办 买大棚房受骗了怎么办 朋友做安利天天来我门面怎么办 安利优惠顾客卡怎么办 苹果手机天气温度不显示怎么办? 安利净水器坏了怎么办 安利净水器滤芯盖搭配坏怎么办 安利会员卡过期了怎么办 婴儿吃了润唇膏怎么办? 用错沐浴露洗头怎么办 雅蜜润肤沐浴露怎么办 自煮小火锅水放少了怎么办 安利皇后锅发黑怎么办 宝宝灌肠后不拉屎怎么办 吃蛋白质粉肚子长胖了怎么办 安利产品过期了怎么办 拼多多拼不到人怎么办 被海南大宗骗了怎么办 手机被游戏扣钱怎么办 做酵素剩下的水果怎么办 喝了酵素胃疼怎么办 海科融通不到账怎么办 美团外卖没生意怎么办 淘宝联盟领券销售怎么办 微信返利被骗了怎么办 众筹失败后资金怎么办 健身房不给退卡怎么办 婆婆陷入民间传销组织怎么办 被三生公司骗了怎么办? ppt保存成了图片怎么办 苹果6速度变慢了怎么办 苹果6s速度很慢怎么办 微信支付上限了怎么办 佳享健康骗老人怎么办 宝宝吃了硅胶乳贴怎么办 用完卫生巾后阴部有些不舒服怎么办 指甲上有荧光剂怎么办 小孩吃了荧光剂怎么办 毛巾上有荧光剂怎么办 用过劣质面膜后怎么办