Service与IntentService 使用

2018-07-29  本文已影响0人  一只笔

使用总结

  1. Service 的生命周期相对与Activity 比较简单,只有3个分别为:onCreate、onStartCommand各onDestory。
  2. 在项目的任何位置调用了Context的startService() 函数,相应的服务就会开启。
    首次创建时会调用onCreate方法,然后会回调onStartCommand()函数。
  3. 服务开启后一直保持运行,直到调用stopService()或stopSelf(),服务会停止。
  4. 每调用一次startService(),onStartCommand(),就会运行一次,但实际上服务只会创建一个实例。
  5. service 是运行在UI 线程中,不要直接做耗时操作,否则是新那些子线程。

service 创建

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        doMyJob();
        return super.onStartCommand(intent, flags, startId);
    }
    
    /**模拟耗时方法*/
    private void doMyJob() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                Log.i("tag", "在service中工作");
            }
        }.start();
    }
}

service 注册

        <service android:name=".MyService" />

service 调用

val intent=Intent(activity, MyService::class.java)
activity.startService(intent)

运行结果:


image.png

IntentService 使用总结

IntentService 是 Android 提供直接运行在子线程的Service.这个只会只会执行一次,执行完后会自动高stopSelf自我销毁。

IntentService 创建

public class MyIntentService extends IntentService {
    public MyIntentService( ) {
        super("");
    }
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public MyIntentService(String name) {
        super(name);
    }
    
    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.i("tag","C当前线程是"+ Thread.currentThread().getName());
    }
}

IntentService 注册

   <service android:name=".MyIntentService" />

IntentService 调用

activity.startService(Intent(activity, MyIntentService::class.java))

运行结果:


image.png

运行在前台的Service

  1. startForeground 函数将服务设置为前台服务。
private void showNotification() {
       NotificationCompat.Builder builder = new NotificationCompat.Builder(this.getApplication())
               .setSmallIcon(R.mipmap.ic_launcher)
               .setContentTitle("标题")
               .setContentText("我是内容");
       //创建通知被点击时触发 Intent
       Intent resultIntent = new Intent(this, MainActivity.class);
       
       //创建任务栈Builder
       TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this);
       taskStackBuilder.addParentStack(MainActivity.class);
       taskStackBuilder.addNextIntent(resultIntent);
       PendingIntent resultPendingIntent = taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
       builder.setContentIntent(resultPendingIntent);
       NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
       //构建通知
       final Notification notification = builder.build();
       //显示通知
       notificationManager.notify(NOTIVICAIONT_ID, notification);
       //启动为前台服务
       startForeground(NOTIVICAIONT_ID, notification);
       
   }
上一篇下一篇

猜你喜欢

热点阅读