[学习笔记]认识Android Service
来源:互联网 发布:mmm互助平台源码下载 编辑:程序博客网 时间:2024/05/16 01:56
以下内容纯粹为本人学习笔记【记录】之用,所听课程(Q群群友百度网盘提供)为极客学院一位老师所讲(老师大名我尚未知晓),如有侵权请告知。在此特别感谢这位老师录制的视频资料。
1、使用Service
MainActivity.java
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(MainActivity.this, MyService.class);//初始化Intent findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //启动服务;方式与启动Activity类同 startService(intent); } }); findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //停止服务;方式也与启动Activity类同 stopService(new Intent(intent)); } }); }}
MyService.java
public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { //创建一个线程,不断地运行。以下可用来在后端执行一些必要的代码 new Thread(){ @Override public void run() { super.run(); System.out.println("服务在运行..."); //休眠1秒 try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); //外界执行了StartService后,会执行此 return super.onStartCommand(intent, flags, startId); }}
activity_main.xml
<Button android:text="启动服务" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnStartService" /> <Button android:text="停止服务" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnStopService" />
2.绑定服务
相同的代码用封装的方法
绑定服务的方法是bindService();解除绑定服务的方法是unbindService();
修改上述代码:
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection { private Intent intent;//定义成员变量 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(MainActivity.this, MyService.class);//初始化Intent //启动服务 findViewById(R.id.btnStartService).setOnClickListener(this); //停止服务 findViewById(R.id.btnStopService).setOnClickListener(this); //绑定服务 findViewById(R.id.btnBindService).setOnClickListener(this); //解除绑定服务 findViewById(R.id.btnUnBindService).setOnClickListener(this); } @Override public void onClick(View view) { //方式也与启动Activity类同 switch (view.getId()) { case R.id.btnStartService: startService(intent); break; case R.id.btnStopService: stopService(intent); break; case R.id.btnBindService: bindService(intent, this, Context.BIND_AUTO_CREATE); break; case R.id.btnUnBindService: unbindService(this); break; } } @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { //服务绑定成功之后执行 System.out.println("Service Connected success"); } @Override public void onServiceDisconnected(ComponentName componentName) { //所在服务进程崩溃或杀掉之后执行 }}
MyService.java
public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { //创建一个线程,不断地运行。以下可用来在后端执行一些必要的代码 new Thread(){ @Override public void run() { super.run(); System.out.println("服务在运行..."); //休眠1秒 try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); //外界执行了StartService后,会执行此 return super.onStartCommand(intent, flags, startId); }}
activity.xml添加两个按钮用于绑定服务和解除绑定服务
<Button android:text="绑定服务" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnBindService" /> <Button android:text="解除服务" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnUnBindService" />
3.Service生命周期
创建onCreate(),若想在Create里执行一段程序,可在此办法内添加代码
销毁onDestroy()
在MyService.java重载onCreate()和onDestroy(),观察Service生命周期
//Service生命周期:创建和销毁 @Override public void onCreate() { super.onCreate(); System.out.println("Service Create"); } @Override public void onDestroy() { super.onDestroy(); System.out.println("Service Destroy"); }
若同时启动和绑定了服务,那么必须同时停止服务和解除绑定服务,服务才会停止掉。
启动服务–Back–回到程序,Service仍在运行着–停止服务,此时Service停掉,即Destroy–绑定服务,Service将处于运行状态– Back,将抛出异常,Service同时Destroy;这意味着Activity若和某个Service绑定的话,在退出Activity时,Service将解除绑定。
在onStartCommand()方法下添加打印语句,以“监听”,发现多次点击启动服务,onCreate()只会执行一次,而onStartCommand()会与点击次数执行相同次数。你在外界,只要你执行startService(),在内部就会执行onStartCommand();而在第一次执行startService()时,会执行onCreate(),以后只会执行onStartCommand(),不会重复执行onCreate()
System.out.println("onStartCommand");
如何来控制程序开始和停止?
再写一个成员函数
private boolean serviceRunning = false;//默认情况下是非运行状态
循环将在serviceRunning下执行:false,循环调出,线程结束。
@Override public void onCreate() { super.onCreate(); System.out.println("Service Create"); serviceRunning = true; //创建一个线程,不断地运行。以下可用来在后端执行一些必要的代码 new Thread(){ @Override public void run() { super.run(); while (serviceRunning) { System.out.println("服务在运行..."); //休眠1秒 try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); }
修改后的MyService.java全部代码如下
public class MyService extends Service { private boolean serviceRunning = false;//默认情况下是非运行状态 public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); //外界执行了StartService后,会执行此 return super.onStartCommand(intent, flags, startId); } //Service生命周期:创建和销毁 @Override public void onCreate() { super.onCreate(); System.out.println("Service Create"); serviceRunning = true; //创建一个线程,不断地运行。以下可用来在后端执行一些必要的代码 new Thread(){ @Override public void run() { super.run(); while (serviceRunning) { System.out.println("服务在运行..."); //休眠1秒 try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override public void onDestroy() { super.onDestroy(); System.out.println("Service Destroy"); serviceRunning = false; }}
- [学习笔记]认识Android Service
- Android Service学习笔记
- Android Service学习笔记
- Android Service学习笔记
- android service 学习笔记
- Android学习笔记 - Service
- Android学习笔记-Service
- android Service学习笔记
- Android Service学习笔记
- [Android学习笔记] Service 学习
- Android Service学习笔记--声明Service
- Android Service学习笔记--创建Service
- Android Service学习笔记--Service生命周期
- Android Service学习笔记--Service知识概要
- 认识 Android Service
- 认识 Android Service
- android学习笔记之Service
- android学习笔记service介绍
- Android----网络图片游览器
- 云计算IaaS的核心技术:虚拟化技术
- Java学习笔记_13
- aquid代理
- 微信WeToast增强插件
- [学习笔记]认识Android Service
- hdu 2612 Find a way ( 双bfs )
- 限制QLineEdit的数值输入范围(QT正则表达式方法),顺便简单介绍下QT正则表达式方法
- 【机房重构】配置文件
- spring框架一之属性值的初始化
- 深入理解JAVA虚拟机(三)内存分配与回收机制
- 标准C++中的string类的用法总结
- PID的快速理解与掌握
- 函数中的数组传递