android 服务

来源:互联网 发布:淘宝账户登录异常提醒 编辑:程序博客网 时间:2024/05/18 19:38

今天自学到了一个android运用中的服务概念:

服务,泛指在后台执行的耗时操作。

它的生命周期是:onCreate onStartCommand onDestroy onBind

它的类型在官方上是:启动、绑定;我们通常称为本地服务以及远程服务。
本地服务:onStartCommand获得返回值,远程服务:onBind

服务的停止有两种方式:stopSelf、stopService。前者是在线程中执行停止服务,后者在activity就可以执行。而stopSelf又有两种形式,一种带参,一种不带参。

继承服务类有两种:Service、IntentService。后者有一个类似于onStartCommand作用的方法:onHandleIntent。不过,在继承了intentService的类中需要进行耗时操作不需要写子线程,可直接进行耗时操作

@Override    protected void onHandleIntent(Intent intent) {        for (int i = 0; i <10 ; i++) {            Log.i("test","i="+i);            SystemClock.sleep(200);        }    }
不过,在执行的时候需要在AndroidManifest.xml中配置
<service            android:name=".MyService02"            android:exported="true"></service>

其中MyService02就是继承了IntentService的类,但是这样还不行,会在这行报错,还需要在这个类中加上一个无参的构造函数

public MyService02(){        super("nn");    }

其中,super(“nn”)中的nn是取的一个名,这行代码必须要写,不然也是会报错的。

下面是完整的代码:(当然,这只是服务的启动,也就是本地服务。绑定也就是远程服务在下一篇博客中会写,请谅解,正在研究中)

MyService01 .JAVA

public class MyService01 extends Service {    @Nullable    @Override    public IBinder onBind(Intent intent) {        Log.i("test","onBind");        return null;    }    @Override    public void onCreate() {        super.onCreate();        Log.i("test","onCreate");    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        String data=intent.getStringExtra("data");        Log.i("test","onStartCommand——"+data);        new MyThread(startId);        return super.onStartCommand(intent, flags, startId);    }    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("test","i="+i);                SystemClock.sleep(1000);            }            //在线程全部完成后停止服务            //不带参            //stopSelf();            //带参            stopSelf(startId);        }    }    @Override    public void onDestroy() {        super.onDestroy();        Log.i("test","onDestroy");    }

MyService02 .JAVA

public class MyService02 extends IntentService {    public MyService02(){        super("nn");    }    /**     * Creates an IntentService.  Invoked by your subclass's constructor.     *     * @param name Used to name the worker thread, important only for debugging.     */    public MyService02(String name) {        super(name);    }    @Override    protected void onHandleIntent(Intent intent) {        for (int i = 0; i <10 ; i++) {            Log.i("test","i="+i);            SystemClock.sleep(200);        }    }}

AndroidManifest.xml

    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service            android:name=".MyService02"            android:exported="true"></service>    </application>

以上,就是今天学到的皮毛,希望对大家会有帮助,如果有不妥的地方,望能在下方评论指出一下,或者私信给我,谢谢!愿每个人每天都能进步!

0 0
原创粉丝点击