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
- android服务
- Android 服务
- android 服务
- Android服务
- Android 服务
- Android 服务
- android服务
- Android-服务
- android 服务
- 服务android
- android 服务
- Android服务
- android服务
- android 服务
- android服务
- android服务
- Android服务
- android 服务
- Codeforce - 675 - C. Money Transfers
- Spring quartz插件的使用
- iOS中一句代码解决倒计时问题
- Python自动化运维课程学习--Day1
- Hexo + Github Pages 搭建博客 且不同设备上同步写作
- android 服务
- 性能优化方面
- AndFix
- HDU 1735 字数统计
- 多线程有什么用:妙趣横生的比喻
- 每天一个linux命令:ln 命令
- Photoshop CS6最新官方正式中文破解版(32位、64位)
- VMware Windows Ubuntu16.04 共享文件 hdfs
- Android调用Camera,获取预览帧中的图像