Android组件
来源:互联网 发布:企业即时通讯软件 编辑:程序博客网 时间:2024/06/07 17:42
大家应该很清楚,Android的四大组件:Activity,Service,ContentProvider和Broadcast。
下面就说说service服务 https://developer.android.google.cn/guide/components/services.html
官方定义是
A Service is an application component representing either an application's desire to perform a longer-running operation whilenot interacting with the user or to supply functionality for other applications to use.
两个关键点:1. 长时间运行;2. 后台,即不与用户交互。
service分为两种,他们的启动方式、生命周期及组件与service是否能够交互等不同。
第一种:
启动方式: 由应用组件(如activity)通过startService启动service。
生命周期:启动后service即可无限期的运行,即使启动它的组件销毁也不会停止。当service的操作完成,通过别的组件调用stopService( )或者服务使用stopSelf( )进行停止。// 可以自行停止吗?
交互:与气动它的组件不能进行交互。
第二种:
启动方式:应用组件通过bindService绑定service。
生命周期:绑定该服务的组件全部(如果有多个)都取消绑定时,此service就会销毁。
交互:允许与启动它的组件交互、发送请求、获取结果,甚至IPC。
使用过程:
几个重要的回调函数:
onStartCommand() //通过startService启动会调用此方法,完成后调用stopService或者stopService停止
onbind() //通过bindService绑定时会调用此方法,通过返回IBinder,供client与service进行通信。
onCreate() //首次创建服务时调用。如果已经在运行则不调用
onDestroy() //服务不再使用且将被销毁时调用,会清理资源所有资源,线程、监听器等。
首先要在manifest中声明:
<manifest ... > ... <application ... > <service android:name=".ExampleService" /> ... </application></manifest>
创建服务:
通过类Service或者IntentService创建服务类。
先看一个简单的service:
public class MyService extends Service { private final static String TAG = "MyService"; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. Log.d(TAG, "onBind"); throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand"); Log.d(TAG, "onCreate processId " + Process.myPid() + ", threadId " + Process.myTid()); return super.onStartCommand(intent, flags, startId); } @Override public void onCreate() {// Log.d(TAG, "onCreate processId " + Process.myPid() + ", threadId " + Process.myTid()); super.onCreate(); } @Override public void onDestroy() { Log.d(TAG, "onDestroy"); super.onDestroy(); }}然后通过activity组件启动:
public class MainActivity extends AppCompatActivity { private static final String TAG = "SendNoti"; private Button btn; private GestureOverlayView gestureView; private WebView mWebview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MyIntentService.class); this.startService(intent); }}
这种是最简单粗暴的启动方式,启动后service会一直存在(可以通过dumpsys activity services查看),并运行在应用的主线程(可以通过Process.myTid()查看)。
- Android组件
- Android组件
- Android组件
- android 组件
- Android组件
- android组件
- android组件
- android组件
- Android组件
- Android组件
- android组件
- android组件
- android组件
- Android 组件
- android组件
- android 组件
- android组件
- Android组件
- Nginx的负载均衡的那点事
- 笨办法12提示别人
- [札记]SSM开发框架集成问题,Spring4.3.x+Mybatis3.4.x+SpringMVC集成时遇到的jason转换问题
- javascript学习(二)— 字符串
- 栈
- Android组件
- Volley源码初读
- python_代码
- hi
- 修改一个表中的字段等于另一个表中字段
- 联合体的存放顺序问题
- 58 同城 iOS 客户端组件化演变思路整理
- 关于在maven下使用tomcat:run命令显示PermGen space异常
- 聚焦一下