android入门之服务
来源:互联网 发布:武藏号战列舰战损数据 编辑:程序博客网 时间:2024/06/01 15:36
今天来讲一下安卓的四大基本组件之一的服务·
先来一个简单的排版
-<LinearLayout tools:context="com" android:orientation="vertical" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"><Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:onClick="start" android:text="启动服务"/><Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:onClick="stop" android:text="停止服务"/></LinearLayout>
也就是两个按钮以便于模拟服务开启和关闭
与之相对应的MainActivity
import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this,MyServices1.class); } public void start(View view){ //开启服务 startService(intent); } public void stop(View view){ stopService(intent);//关闭服务 }}
然后需要新建一个类来继承Service 并重新它的方法
import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.SystemClock;import android.support.annotation.Nullable;import android.util.Log;/** * @author Zking-Snail * @time 2017/2/10 19:09 * @Version ${REV} */public class MyServices 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).start(); 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); }
然后我这里是模拟一下进行打印的操作
可以看到我这里另开了一个线程来进行打印这类耗时的操作
个人的见解是:
一.在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务。
同样是在后台运行,不需要交互的情况下,如果只是完成某个任务,之后就不需要运行,而且可能是多个任务,需需要长时间运行的情况下使用线程。
二.如果任务占用CPU时间多,资源大的情况下,要使用线程。
关于服务的停止方式
stopSelf();//当第一个线程执行完毕,则会停止服务
//所有的线程都执行完毕,才停止服务 stopSelf(startId);
服务为了弥补也线程相比方面的不足还可以继承另一个类IntentService
import android.app.IntentService;import android.content.Intent;import android.os.SystemClock;import android.util.Log;/** * @author Zking-Snail * @time 2017/2/10 20:05 * @Version ${REV} */public class MyServices2 extends IntentService { //自定义一个无参的构造方法来实现有参的构造方法 public MyServices2() { super(""); } public MyServices2(String name) { super(name); } //类似Service中的:onStartCommand @Override protected void onHandleIntent(Intent intent) { for (int i = 0; i <10 ; i++) { Log.i("test","i="+i); SystemClock.sleep(200); } }}
相对于继承Service 而言IntentService、并不需要另开线程来执行耗时的操作,而且在关闭服务的时候继承了IntentService的类
会依照线程开辟的顺序来依次关闭线程!
与广播差不多的是也要在清单文件中声明
<service android:name=".MyServices2" android:exported="true"//让服务可以被执行 ></service> </application>
可能我说的不够好,不喜勿喷
0 0
- android入门之服务
- Android开发入门之服务的生命周期
- Android 服务的入门
- Android使用WCF的服务程序之入门
- RabbitMQ服务之入门篇
- Android入门:绑定本地服务
- Android入门:绑定本地服务
- Android项目之--服务
- android之服务
- Android服务之Service
- Android服务之Service
- Android服务之Service
- Android之Service服务
- Android服务之Service
- android之service服务
- Android服务之Service
- Android服务之Service
- Android 之 bindServer服务
- Opencv 3.1安装遇到的问题记录
- 1059. C语言竞赛(20)
- ROC曲线及其matlab实现ROC曲线的绘画
- JZOJ-senior-3502. 【NOIP2013模拟11.4B组】方格游戏
- PHP下生成随机码
- android入门之服务
- 对称加密与非对称加密
- CSU-1640
- java多线程之实现Runnable接口创建线程
- 1060. 爱丁顿数(25)
- 2017.2.09【初中部 提高组】模拟赛C组 城市统计 题解
- WC2017 冬眠记
- 1061. 判断题(15)
- Java i++原理及i=i++的问题说明