本篇文章為大家展示了android中IntentService如何使用,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)專注于伊犁企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),購物商城網(wǎng)站建設(shè)。伊犁網(wǎng)站建設(shè)公司,為伊犁等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
服務(wù)的簡單說明
一、 前臺服務(wù)與IntentService:
前臺服務(wù)可以一直保持運(yùn)行狀態(tài),而不會由于系統(tǒng)內(nèi)存不足的原因?qū)е卤换厥?/p>
service服務(wù)測試的準(zhǔn)備代碼
我們通過一個(gè)具體的案例來說明start與bind方式的service服務(wù)的生命周期的介紹。項(xiàng)目結(jié)果如下:
一、 在MainActivity.java中做一些初始化工作,如下代碼:
private final static String TAG = "MyIntentService"; private MyIntentService.MyBinder binder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { binder = (MyIntentService.MyBinder) service; binder.sayHello(name.getClassName()); } @Override public void onServiceDisconnected(ComponentName name) { Log.i(TAG, "service disconnect: " + name.getClassName()); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
二、 創(chuàng)建一個(gè)簡單的IntentService服務(wù)類:MyIntentService
package com.example.linux.intentservicetest; import android.app.IntentService; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class MyIntentService extends IntentService { private final static String TAG = "MyIntentService"; private MyBinder myBinder = new MyBinder(); class MyBinder extends Binder { public void sayHello(String name) { Log.i(TAG, "say hello method: " + name); } public void sayWorld(String name) { Log.i(TAG, "say world method: " + name); } } @Override public IBinder onBind(Intent intent) { return myBinder; } public MyIntentService() { super("MyIntentService"); Log.i(TAG, "myintent service constructor."); } @Override public void onCreate() { Log.i(TAG, "on create."); super.onCreate(); } @Override protected void onHandleIntent(Intent intent) { Log.i(TAG, "handle intent: " + intent.getStringExtra("username") + ", thread: " + Thread.currentThread()); } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "on destroy."); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "on start command."); return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { //默認(rèn)返回false String username = intent.getStringExtra("username"); Log.i(TAG, "on unbind: " + super.onUnbind(intent) + ", username: " + username); return true; } @Override public void onRebind(Intent intent) { Log.i(TAG, "on rebind"); super.onRebind(intent); } }
三、 創(chuàng)建一個(gè)簡單的前臺服務(wù)類:FrontService
package com.example.linux.intentservicetest; import android.app.Notification; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class FrontService extends Service { private final static String TAG = "MyIntentService"; public FrontService() { Log.i(TAG, "front service constructor"); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Notification.Builder builder = new Notification.Builder(this); Intent intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setSmallIcon(R.mipmap.ic_launcher).setTicker("ticker"); builder.setWhen(System.currentTimeMillis()).setAutoCancel(true); builder.setContentTitle("content title").setContentText("content text"); builder.setContentIntent(pendingIntent); Notification notify = builder.getNotification(); notify.defaults = Notification.DEFAULT_ALL; startForeground(10, notify); } }
四、 在AndroidManifest.xml中注冊服務(wù)與活動(dòng):
Intent服務(wù)的使用
一、 在MainActivity中創(chuàng)建方法,啟動(dòng)停止服務(wù):
// 開啟服務(wù) public void startService(View view) { Intent intent = new Intent(); intent.putExtra("username", "linux"); intent.setClass(MainActivity.this, MyIntentService.class); startService(intent); } // 停止服務(wù) public void stopService(View view) { Intent intent = new Intent(); intent.setClass(MainActivity.this, MyIntentService.class); stopService(intent); }
二、 在MainActivity中創(chuàng)建方法,綁定解綁服務(wù):
// 綁定服務(wù) public void bindService(View view) { Intent intent = new Intent(); intent.setClass(MainActivity.this, MyIntentService.class); intent.putExtra("username", "linux"); boolean isBind = bindService(intent, connection, Context.BIND_AUTO_CREATE); Log.i(TAG, "bind service: " + isBind); } // 解綁服務(wù) public void unbindService(View view) { Intent intent = new Intent(); intent.setClass(MainActivity.this, MyIntentService.class); unbindService(connection); }
三、 運(yùn)行結(jié)果:
點(diǎn)擊start:
03-25 08:01:53.460 8389-8389/? I/MyIntentService: myintent service constructor. 03-25 08:01:53.460 8389-8389/? I/MyIntentService: on create. 03-25 08:01:53.475 8389-8389/? I/MyIntentService: on start command. 03-25 08:01:53.477 8389-8727/? I/MyIntentService: handle intent: linux, thread: Thread[IntentService[MyIntentService],5,main] 03-25 08:01:53.478 8389-8389/? I/MyIntentService: on destroy.
點(diǎn)擊stop:無輸出
點(diǎn)擊bind:
03-25 08:02:25.421 8389-8389/? I/MyIntentService: bind service: true 03-25 08:02:25.422 8389-8389/? I/MyIntentService: myintent service constructor. 03-25 08:02:25.422 8389-8389/? I/MyIntentService: on create. 03-25 08:02:25.432 8389-8389/? I/MyIntentService: say hello method: com.example.linux.intentservicetest.MyIntentService
點(diǎn)擊unbind:
03-25 08:02:28.486 8389-8389/? I/MyIntentService: on unbind: false, username: linux 03-25 08:02:28.490 8389-8389/? I/MyIntentService: on destroy.
前臺服務(wù)的使用
一、 在MainActivity中創(chuàng)建方法,啟動(dòng)前臺服務(wù):
// 前臺服務(wù)的使用 public void frontService(View view) { Intent intent = new Intent(); intent.setClass(MainActivity.this, FrontService.class); startService(intent); }
二、 運(yùn)行結(jié)果: 在手機(jī)的通知欄中
IntentService的原理分析
一、 intentService是繼承Service的抽象方法:
public abstract class IntentService extends Service
二、 intentService包含的一些字段引用如下:
private volatile Looper mServiceLooper; private volatile ServiceHandler mServiceHandler; private String mName; private boolean mRedelivery; private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { onHandleIntent((Intent)msg.obj); stopSelf(msg.arg1); } }
二、 和service一樣在啟動(dòng)的時(shí)候,首先是執(zhí)行構(gòu)造方法,接著是onCreate方法,然后是onStartCommand方法,在onStartCommand中執(zhí)行了onStart方法(執(zhí)行流程在android基礎(chǔ)---->service的生命周期講過):
onCreate方法,開啟了一個(gè)線程,并且得到Looper與初始化了一個(gè)Handler
@Override public void onCreate() { // TODO: It would be nice to have an option to hold a partial wakelock // during processing, and to have a static startService(Context, Intent) // method that would launch the service & hand off a wakelock. super.onCreate(); HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); thread.start(); mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); }
onStart方法,用上述的Handler發(fā)送信息
@Override public void onStart(Intent intent, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); }
onStartCommand方法,調(diào)用onStart方法,發(fā)送信息
@Override public int onStartCommand(Intent intent, int flags, int startId) { onStart(intent, startId); return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY; }
***上述的Handler得到信息,調(diào)用handleMessage方法,其中有stopSelf(msg.arg1)方法,停止了服務(wù):
三、 這里附上service類的兩個(gè)方法,源代碼是android6.0的
在Service中的onStart方法已經(jīng)被廢棄了:
/** * @deprecated Implement {@link #onStartCommand(Intent, int, int)} instead. */ @Deprecated public void onStart(Intent intent, int startId) { }
在onStartCommand的方法中
public int onStartCommand(Intent intent, int flags, int startId) { onStart(intent, startId); return mStartCompatibility ? START_STICKY_COMPATIBILITY : START_STICKY; }
上述內(nèi)容就是android中IntentService如何使用,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。