- 浏览: 7315850 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service。Service 可以分为有无限生命和有限生命两种。
特别需要注意的是Service跟Activities是不同的(简单来说可以理解为后台与前台的区别),例如,如果需要使用Service的话,
需要调用startService(),从而利用startService()去调用Service中的OnCreate()和onStart()方法来启动一个后台的Service。
Service的开发如下:
1.创建继承自Service的类,并实现相关的方法。
2.在androidmanifest.xml中application中添加service配置。
3.通过intent启动或者关闭 相关的服务
启动一个Service的过程如下:
context.startService() ->onCreate()- >onStart()->Service running
其中onCreate()可以进行一些服务的初始化工作,onStart()则启动服务。
停止一个Service的过程如下:
context.stopService() | ->onDestroy() ->Service stop
各种目录文件的获取资源信息:
/res/xml:
XmlResourceParser xml = getResources().getXml(R.xml.data);
/res/raw
getResources().openRawResource(R.raw.rawtext)
/assets
AssetManager assets = getAssets();
assets.open("data.txt"))
服务的生命周期
部分内容参考自CSDN博客:http://blog.csdn.net/wtao158/archive/2010/01/08/5149721.aspx
有了 Service 类我们如何启动他呢,有两种方法:
• Context.startService()
• Context.bindService()
1. 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
总结:
1. startService()的目的是回调onStart()方法,onCreate() 方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate() 方法。
2. bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。
由于Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。
与 Service 通信并且让它持续运行
如果我们想保持和 Service 的通信,又不想让 Service 随着 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。当你不需要绑定的时候就执行 unbindService() 方法,执行这个方法只会触发 Service 的 onUnbind() 而不会把这个 Service 销毁。这样就可以既保持和 Service 的通信,也不会随着 Activity 销毁而销毁了。
提高 Service 优先级
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的 Service 碰上了这种情况,多半会先被杀掉。但如果你增加 Service 的优先级就能让他多留一会,我们可以用 setForeground(true) 来设置 Service 的优先级。
为什么是 foreground ? 默认启动的 Service 是被标记为 background,当前运行的 Activity 一般被标记为 foreground,也就是说你给 Service 设置了 foreground 那么他就和正在运行的 Activity 类似优先级得到了一定的提高。当让这并不能保证你得 Service 永远不被杀掉,只是提高了他的优先级。
摘自网络其他资料:关于Service生命周
Android Service生命周期与Activity生命周期是相似的,但是也存在一些细节上也存在着重要的不同:
onCreate和onStart是不同的
通过从客户端调用Context.startService(Intent)方法我们可以启动一个服务。如果这个服务还没有运行,Android将启动它并且在onCreate方法之后调用它的onStart方法。如果这个服务已经在运行,那么它的onStart方法将被新的Intent再次调用。所以对于单个运行的Service它的onStart方法被反复调用是完全可能的并且是很正常的。
onResume、onPause以及onStop是不需要的
回调一个服务通常是没有用户界面的,所以我们也就不需要onPause、onResume或者onStop方法了。无论何时一个运行中的Service它总是在后台运行。
onBind
如果一个客户端需要持久的连接到一个服务,那么他可以调用Context.bindService方法。如果这个服务没有运行方法将通过调用onCreate方法去创建这个服务但并不调用onStart方法来启动它。相反,onBind方法将被客户端的Intent调用,并且它返回一个IBind对象以便客户端稍后可以调用这个服务。同一服务被客户端同时启动和绑定是很正常的。
onDestroy
与Activity一样,当一个服务被结束是onDestroy方法将会被调用。当没有客户端启动或绑定到一个服务时Android将终结这个服务。与很多Activity时的情况一样,当内存很低的时候Android也可能会终结一个服务。如果这种情况发生,Android也可能在内存够用的时候尝试启动被终止的服务,所以你的服务必须为重启持久保存信息,并且最好在onStart方法内来做。
在android中Activity负责前台界面展示,service负责后台的需要长期运行的任务。Activity和Service之间的通信主要由IBinder负责。在需要和Service通信的Activity中实现ServiceConnection接口,并且实现其中的onServiceConnected和onServiceDisconnected方法。然后在这个Activity中还要通过如下代码绑定服务:
- Intent intent = new Intent().setClass( this , IHRService.class );
- bindService( intent , this , Context.BIND_AUTO_CREATE );
当调用bindService方法后就会回调Activity的onServiceConnected,在这个方法中会向Activity中传递一个IBinder的实例,Acitity需要保存这个实例。代码如下:
- public void onServiceConnected( ComponentName inName , IBinder serviceBinder) {
- if ( inName.getShortClassName().endsWith( "IHRService" ) ) {
- try {
- this.serviceBinder= serviceBinder;
- mService = ( (IHRService.MyBinder) serviceBinder).getService();
- //mTracker = mService.mConfiguration.mTracker;
- } catch (Exception e) {}
- }
- }
在Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。
- public class MyBinder extends Binder {
- //此方法是为了可以在Acitity中获得服务的实例
- public IHRService getService() {
- return IHRService.this;
- }
- //这个方法主要是接收Activity发向服务的消息,data为发送消息时向服务传入的对象,replay是由服务返回的对象
- public boolean onTransact( int code , Parcel data , Parcel reply , int flags ) {
- //called when client calls transact on returned Binder
- return handleTransactions( code , data , reply , flags );
- }
- }
然后在Service中创建这个类的实例:
- public IBinder onBind( Intent intent ) {
- IBinder result = null;
- if ( null == result ) result = new MyBinder() ;
- return result;
- }
这时候如果Activity向服务发送消息,就可以调用如下代码向服务端发送消息:
- inSend = Parcel.obtain();
- serviceBinder.transact( inCode , inSend , null , IBinder.FLAG_ONEWAY );
这种方式是只向服务端发送消息,没有返回值的。如果需要从服务端返回某些值则可用如下代码:
- result = Parcel.obtain();
- serviceBinder.transact( inCode , inSend , result , 0 );
- return result;
发送消息后IBinder接口中的onTransact将会被调用。在服务中如果有结果返回(比如下载数据)则将结果写入到result参数中。在Activity中从result中读取服务执行的结果。
上面只是描述了如何由Acitity向Service发送消息,如果Service向Activity发送消息则可借助于BroadcastReceiver实现,BroadcastReceiver比较简单,前面在将Service中已有提及。
android service使用实例:
package com.etrip.srvs; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 实例: 接下来的实例是一个利用后台服务播放音乐的小例子,点击start运行服务,点击stop停止服务。 * * * @author longgangbai */ public class AndroidServicesActivity extends Activity implements OnClickListener { private static final String TAG = "ServicesDemo"; Button buttonStart, buttonStop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); buttonStart = (Button) findViewById(R.id.buttonStart); buttonStop = (Button) findViewById(R.id.buttonStop); buttonStart.setOnClickListener(this); buttonStop.setOnClickListener(this); } public void onClick(View src) { switch (src.getId()) { case R.id.buttonStart: Log.d(TAG, "onClick: starting srvice"); startService(new Intent(this, MyService.class)); break; case R.id.buttonStop: Log.d(TAG, "onClick: stopping srvice"); stopService(new Intent(this, MyService.class)); break; } } }
service的实现:
package com.etrip.srvs; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.util.Log; import android.widget.Toast; /** * * Service的学习 * * * @author longgangbai */ public class MyService extends Service { private static final String TAG = "MyService"; MediaPlayer player; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); player = MediaPlayer.create(this, R.raw.baby);//运行例子是,需要替换音乐的名称 player.setLooping(false); // Set looping } @Override public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); player.stop(); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); player.start(); } }
图片翻转:
package com.easyway.andorid.hello; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ImageView.ScaleType; import android.widget.LinearLayout.LayoutParams; /** * Android实现图片的缩放功能 * @author longgangbai * @date 2010-5-24 * @version 1.0 * @since JDK6.0 */ public class ImageViewAndorid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置程序的标题 setTitle("缩放和旋转图片"); //实例化LinearLayout类的对象lly LinearLayout lly=new LinearLayout(this); //获取图片的信息 这里用的是icon.png ,图片存放的位置在res/drawable下, //同时这里还方有itfunz.bmp,这就是应用程序的图标 Bitmap bmpOrg=BitmapFactory.decodeResource(getResources(), R.drawable.icon); //获取图片的原始的大小 int width=bmpOrg.getWidth(); int height=bmpOrg.getHeight(); int newWidth=400; int newheight=400; //定义缩放的高和宽的尺寸 float sw=((float)newWidth)/width; float sh=((float)newheight)/height; //创建操作图片的用的Matrix对象 Matrix matrix=new Matrix(); matrix.postScale(sw,sh); //缩放图片的动作 matrix.postRotate(30); //旋转30* Bitmap resizeBitmap=Bitmap.createBitmap(bmpOrg,0,0,width,height,matrix,true); //创建一个新的图片 BitmapDrawable bmp=new BitmapDrawable(resizeBitmap); //创建Bitmap转换为Drawable对象,使其可以使用在ImageView和ImageButton中 ImageView imageView=new ImageView(this); //创建ImageView的对象 imageView.setImageDrawable(bmp); //将图片设置到中间 imageView.setScaleType(ScaleType.CENTER); //将图片填充之整个视图 lly.addView(imageView, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); //添加ImageView到布局模板中 setContentView(lly); } }
发表评论
-
[转]年度最实用50款免费Android应用推荐
2012-11-08 16:39 3345据国外媒体报道,有人说Android应用市场比iPhone应用 ... -
GIS的学习(四十五)【转】Integration of the MBTiles format on Android
2012-10-22 17:13 2922转载自 http:/ ... -
GIS的学习(四十四)osmdroid sdcard检查
2012-10-15 16:12 2319在许多应用中使用到sdcard的检查,在osmdro ... -
GIS的学习(四十三)osmdroid基于几个经典代理类
2012-10-15 16:06 2605在osmdroid中给基于位置的代理类如下: pack ... -
Android中PopupWindow的用法(位置、动画、焦点)
2012-10-12 14:12 11486在Android中有很多级别的Window,不同级别的Wind ... -
【转】Android根据分辨率进行单位转换-(dp,sp转像素px)
2012-10-11 09:18 27106Android系统中,默认的单位是像素(px)。也就是说,在没 ... -
GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析
2012-09-23 11:49 11469在手机通过osmdroid调用离线地图必须放在 ... -
GIS的学习(二十八)Osmdroid相关的开源项目
2012-09-23 11:31 25342osm 数据格式(openstreet map)与Ro ... -
GIS的学习(二十七)通过geoserver的georss访问第三方地图
2012-09-23 00:34 3585在geoserver中如果想调用第三方地图可以采 ... -
android中使用 定时更新界面定时器Timer的使用
2012-09-22 22:09 25492handler的使用 一、Handler的定义: ... -
【转】Android应用程序的自动更新升级(自身升级、通过tomcat) .
2012-09-16 15:03 7343http://blog.csdn.net/mu0206mu/a ... -
GIS的学习(二十七)OGC 的WCS WFS 及WMS 服务
2012-09-11 22:22 12085http://www.gisall.com/?6678/v ... -
GIS的学习(二十六)geotools 使用 部分代码总结
2012-09-11 22:20 5659前段时间的一个项目 本来用ae完成了种种的 查询,空间分析等等 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9679官方geoserver中WMS服务中几种操作的API的详细说明 ... -
GIS的学习(二十四)android异步调用geoserver wms中的地图
2012-09-10 17:38 8129在geoserver的客户端通过wms的GetMap实现 ... -
GIS的学习(二十三)geoserver中CQL和ECQL的使用
2012-09-10 16:29 6592以下引用自官方文档: CQL and ECQL¶ CQ ... -
GIS的学习(二十二)osmdroid中添加縮放控件
2012-09-06 23:09 2772package com.geoserver.osmdroid; ... -
GIS的学习(二十一)在osmdroid 地图中添加marker 并添加事件
2012-09-06 22:27 6572我有 osmdroid,overlayswithf ... -
GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
2012-08-30 18:48 11385基于Geoserver发布的wfs服务,与Openlayers ... -
GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
2012-08-30 17:28 10322在geoserver自定义的地图中通过geoserver ...
相关推荐
本文将深入探讨如何在Android平台上实现图片的拼接、缩放、特效、拖动以及翻转功能,这些都是移动应用中常见的交互和视觉元素。我们将以`DrawDemo`为例,来阐述这些技术的实现细节。 1. **图片拼接**: 图片拼接是...
在Android应用开发中,图像处理和展示是必不可少的一部分,尤其是对于需要用户交互的图片查看功能。这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过...
标签为“vue iview多张图片大图预览 vue iview多张图片预览 vue图片预览缩放翻转”,这些标签指向了本文的核心内容,即如何在Vue和iView的环境下实现图片预览功能,以及如何实现图片的缩放和翻转。这些标签将帮助...
本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解SurfaceView的核心特性是关键。SurfaceView拥有自己的独立渲染线程,这使得它能够高效地处理图像数据,避免阻塞UI主线程。在实现图片缩放...
本篇将详细介绍如何在Android中实现图片的缩放功能,特别是利用ImageView结合手势识别来实现这一效果。 首先,我们需要了解Android中的Bitmap对象,它是Android系统用来表示图像数据的核心类。Bitmap可以存储像素...
本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...
总之,实现“Android studio 实现图片翻转”这一功能,需要掌握Android动画系统的基础知识,理解视图动画、属性动画的原理,熟悉自定义View的绘制过程,以及如何处理用户交互。通过这些技术,可以创建出类似支付宝...
"android手势处理图片平移、缩放和旋转"这个主题涉及到的主要知识点包括Android手势检测、ImageView的扩展以及图片操作。 首先,我们要了解Android的手势检测。Android系统提供了一套GestureDetector和...
【Android图片浏览全屏缩放】是一个Android应用开发中的常见需求,主要涉及到图像处理和UI交互方面的技术。在Android平台上,我们通常会使用ImageView组件来显示图片,但是要实现图片的全屏展示以及平滑缩放,需要更...
在Android开发中,图片的拖拉缩放功能是常见的用户交互设计,特别是在各种应用和游戏中。这个小例子展示了如何在Android环境中实现这一功能。本文将详细介绍实现这一功能的关键技术和步骤。 首先,我们要创建一个...
在Android开发中,实现图片浏览的全屏缩放效果是一项常见的需求,特别是在社交应用中,如QQ好友动态和微信朋友圈。这种功能不仅需要提供良好的用户体验,还需要考虑性能和内存优化,因为图片通常较大,处理不当可能...
综上所述,"Android图片缩放全功能"涵盖了从基础的图片缩放技术到高级的图片处理库和优化策略。开发者需要理解各种缩放方法、资源管理和优化技巧,才能在Android应用中实现高效的图片显示和流畅的用户体验。
这个项目可能包含了实现上述功能的代码示例,通过研究其源码,可以更直观地了解如何在Android 2.0以下版本实现图片滑动和按键缩放。需要注意的是,虽然早期版本的Android系统限制了多点触控,但通过巧妙的设计和编程...
标题中的“图片查卡器JS,支持图片缩放翻转漫游”指的是一个基于JavaScript的图片查看器,它具备图片缩放、翻转和漫游(平移)等功能,为用户提供更加灵活和丰富的图片浏览体验。这样的工具在网页设计、在线相册、...
`ScaleView`通常是指一个自定义视图,用于实现图片的平滑缩放和平移功能。本文将深入探讨Android图片预览缩放的相关知识点,并结合`ScaleView`的实现原理进行详细解析。 ### 1. 图片加载库 在Android中,高效的...
在Android开发中,图片手势缩放是用户交互中常见的功能,尤其在查看照片、地图或者任何需要用户放大或...这个例子应该包含了实现这一功能的完整代码和示例,对于理解如何在Android应用中集成图片手势缩放非常有帮助。
在Android开发中,图片的缩放与动画效果是常见的需求,尤其在社交应用如QQ、微信和新浪微博中,用户在浏览图片时会遇到从缩略图平滑过渡到原图的功能。这个"Android图片缩放动画Demo"正是为了实现这样的功能而设计的...
总的来说,Android中的Matrix类提供了丰富的图像变换功能,结合ImageView和Bitmap,我们可以实现各种复杂的图像操作,如缩放和平移。理解并熟练运用Matrix,可以极大地提升Android应用中图像处理的灵活性和用户体验...
通过查看和学习这个项目的代码,开发者可以更好地理解如何在Android中实现图片的移动、缩放和裁剪功能。 总之,Android图片裁剪涉及多个方面,包括图像处理、手势识别和UI交互。通过掌握这些技术,开发者能够创建...
这个"Android图片编辑demo"提供了一个基础的实现,涵盖了图片的裁剪、旋转和缩放等操作。下面我们将深入探讨这些知识点。 首先,**图片裁剪**是用户对图片进行个性化调整的常用功能。在Android中,可以通过`android...