技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

Android开发学习笔记:Service的简介和启动方式

一.Service的简介1.Service介绍和作用Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当退出播放音乐的应用,如果不用Service,我 们就听不到歌了,所以这时候就得用到Service了。 2.Service生命周期Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。 二.Service的启动方式Service的有两种启动方式:Context.startService()和Context.bindService(),这两种方式对Service生命周期的影响是不同的。 1.Context.startService()方式启动 ①Context.startService()方式的生命周期: 启动时,startService –> onCreate() –> onStart() 停止时,stopService –> onDestroy()如果调用者直接退出而没有停止Service,则Service 会一直在后台运行 Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。 ②Context.startService()方式启动 Service的方法: 下面是具体例子: MainActivity.java package com.android.service.activity;   import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;   public class MainActivity extends Activity  {      private Button startBtn;      private Button stopBtn;      @Override     public void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          startBtn = (Button) findViewById(R.id.startBtn);          stopBtn = (Button) findViewById(R.id.stopBtn);          //添加监听器          startBtn.setOnClickListener(listener);          stopBtn.setOnClickListener(listener);      }            //启动监听器      private OnClickListener listener=new OnClickListener()      {                 @Override         public void onClick(View v)          {              Intent intent=new Intent(MainActivity.this, ServiceDemo.class);              switch (v.getId())              {              case R.id.startBtn:                  startService(intent);                  break;              case R.id.stopBtn:                  stopService(intent);                  break;              default:                  break;              }                     }      };  }  ServiceDemo.java package com.android.service.activity;   import android.app.Service;  import android.content.Intent;  import android.os.IBinder;  import android.util.Log;   public class ServiceDemo extends Service  {      private static final String TAG="Test";            @Override     //Service时被调用      public void onCreate()      {          Log.i(TAG, "Service onCreate--->");          super.onCreate();      }       @Override     //当调用者使用startService()方法启动Service时,该方法被调用      public void onStart(Intent intent, int startId)      {          Log.i(TAG, "Service onStart--->");          super.onStart(intent, startId);      }       @Override     //当Service不在使用时调用      public void onDestroy()      {          Log.i(TAG, "Service onDestroy--->");          super.onDestroy();      }       @Override     //当使用startService()方法启动Service时,方法体内只需写return null      public IBinder onBind(Intent intent)      {          return null;      }  }   main.xml <?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"     >     <Button         android:id="@+id/startBtn"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="启动 Service"         />     <Button         android:id="@+id/stopBtn"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="停止 Service"         /> </LinearLayout>  在AndroidManifest.xml文件中添加16~21行的声明 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="com.android.service.activity"       android:versionCode="1"       android:versionName="1.0">     <uses-sdk android:minSdkVersion="10" />      <application android:icon="@drawable/icon" android:label="@string/app_name">         <activity android:name=".MainActivity"                   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=".ServiceDemo" >                 <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>     </service>        </application> </manifest> 效果图:当点击按钮时,先后执行了Service中onCreate()->onStart()这两个方法,LogCat显示如下:... 全文

Service 移动开发 详解 休闲 Android

Android Service 详解

一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面。其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行。此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互。例如一个Service可以处理网络事物,播放音乐,读写文件或者读写ContentProvider,所以这些都在后台运行。   一个Service可以以以下两种形式存在:... 全文

Android——启动过程详解

                                                                                         Android从Kernel启动有4个步骤(以android4.2为例)(1) init进程启动(2) Native服务启动(3) System Server,Android服务启动(4) Home启动总体启动框架图如:... 全文

init service zygote VM Launcher

1