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