- 浏览: 599354 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (154)
- java (31)
- Struts (3)
- Hibernate (8)
- Spring (6)
- JS (14)
- DWR (1)
- Oracle (1)
- SQL Server (0)
- JSF (0)
- JPA (0)
- Grails (3)
- Ajax (1)
- Extjs (0)
- jQuery (4)
- MySQL (2)
- 正则表达式 (2)
- 其他 (6)
- 计算机应用 (7)
- Groovy (8)
- Google (1)
- Web (2)
- MongoDB Java Driver (1)
- mongodb (1)
- Linux (3)
- HTML (1)
- Tomcat (3)
- Eclipse (2)
- JSP (1)
- 缓存 (1)
- 动态 (1)
- 问题与解决 (3)
- HY (1)
- Android (35)
- LBS (1)
最新评论
-
u012136165:
list 方法:纠正:[2,5].add(1,9) ...
Groovy的list和map -
bruce.yuan:
误人子弟的文章。已经看到N个人转了这个帖子,这要贻害多少新人啊 ...
理解并解决GBK转UTF-8奇数中文乱码 -
思念-悲伤:
特意登录上来,感谢下!
理解String的compareTo()方法返回值 -
bo_hai:
总结的好,有效。
理解String的compareTo()方法返回值 -
u012678420:
在onCreate方法中获取某个View的宽度和高度
package com.improve.service; import java.util.Random; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; /** * 因为Service由主线程执行,耗时操作应该创建独立线程 * @author Davee */ public class AnalysedService extends Service { private static final String TAG = "ServiceAnalysis"; public static final String AUTO_STOP = "auto_stop"; private final Random mRandom = new Random(); @Override public void onCreate() { Log.i(TAG, "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand flags: " + flags + " startId: " + startId); if (AUTO_STOP.equals(intent.getAction())) { doLastThing(); } /* 返回值告诉Android系统当这个Service被Kill之后(比如当系统内存不足时)后续操作, START_STICKY 表示系统Kill这个Service之后, 如果重新创建这个Service时在调用onStartCommand,不会将最后的Intent作为参数传入 START_REDELIVER_INTENT 则会传入被杀前未处理的最后一个Intent */ return START_STICKY; } @Override public IBinder onBind(Intent intent) { Log.i(TAG, "onBind"); return localBinder; } @Override public boolean onUnbind(Intent intent) { Log.i(TAG, "onUnbind"); return true; } @Override public void onRebind(Intent intent) { Log.i(TAG, "onRebind"); } @Override public void onDestroy() { Log.i(TAG, "onDestroy"); } private final LocalBinder localBinder = new LocalBinder(); public class LocalBinder extends Binder { public AnalysedService getService() { return AnalysedService.this; } } /** * 提供这个方法用个来与客户端(Activity)交互 * @return */ public int getRandomInt() { Log.i(TAG, "getRandomInt"); return mRandom.nextInt(100); } /** * 执行完本方法就停止本服务 */ public void doLastThing() { Log.i(TAG, "doLastThing"); //假设这里下载一个文件,这是个耗时操作 new Thread() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } //文件下载完成后停止本服务 AnalysedService.this.stopSelf();//Service有绑定时不能自动停止,调用无效 } }.start(); } }
package com.improve; import com.improve.service.AnalysedService; import com.improve.service.AnalysedService.LocalBinder; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class ServiceAnalysis extends Activity { private final String TAG = "ServiceAnalysis"; private AnalysedService analysedService; private ServiceConnection sc = new ServiceConnection() { /* 绑定连接建立时调用 */ @Override public void onServiceConnected(ComponentName cn, IBinder binder) { Log.i(TAG, "onServiceConnected"); LocalBinder localBinder = (LocalBinder)binder; analysedService = localBinder.getService(); } /* 在Service意外断开时调用(如Service进程崩溃) 这个例子不会调这个方法,因为它在同一进程中运行 unbindService方法不会调用此方法 */ @Override public void onServiceDisconnected(ComponentName cn) { Log.i(TAG, "onServiceDisconnected"); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.service_analysis); Button start = (Button)findViewById(R.id.service_start); Button stop = (Button)findViewById(R.id.service_stop); Button bind = (Button)findViewById(R.id.service_bind); Button unbind = (Button)findViewById(R.id.service_unbind); Button interact = (Button)findViewById(R.id.service_interact); Button lastThing = (Button)findViewById(R.id.service_last_thing); //每次点击都会调用Service的onStartCommand方法 start.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(ServiceAnalysis.this, AnalysedService.class); ServiceAnalysis.this.startService(intent); } }); //没有开启Service之前调用没意义,但不会有异常 stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(ServiceAnalysis.this, AnalysedService.class); ServiceAnalysis.this.stopService(intent); } }); //只会在未绑定时调用Service方法 bind.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { /* 绑定是异步实现的,因此需要通过 ServiceConnection接口来监视与Service之间的连接 */ Intent intent = new Intent(ServiceAnalysis.this, AnalysedService.class); ServiceAnalysis.this.bindService(intent, sc, Context.BIND_AUTO_CREATE); } }); unbind.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //没有bindService之前调用会抛异常,因此调用前需要判断是否绑定 ServiceAnalysis.this.unbindService(sc); } }); interact.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //只要之前调用过Bind(即使又调用了Unbind),就可以调用服务中的方法 Toast.makeText(ServiceAnalysis.this, "从Service取到的整数为 "+analysedService.getRandomInt(), Toast.LENGTH_SHORT).show(); } }); lastThing.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(AnalysedService.AUTO_STOP); intent.setClass(ServiceAnalysis.this, AnalysedService.class); ServiceAnalysis.this.startService(intent); } }); } }
发表评论
-
深入分析AIDL原理
2011-11-13 16:14 25439在上一篇文章(Service使用方式)中,介绍了Android ... -
Service使用方式
2011-11-13 15:23 6073使用Service的场合: ... -
在onCreate方法中获取某个View的宽度和高度
2011-10-08 14:54 14503有时候需要在onCreate方法中知道某个View组件的宽度和 ... -
不加载图片,仅仅获取图片文件分辨率
2011-10-08 11:09 3999当从SD卡中获取图片时,如果图片太大,加载会出现溢出异常。因此 ... -
图片移动和缩放
2011-09-29 22:15 2154import android.graphics.Matr ... -
定时任务
2011-09-28 00:53 1533定时任务有执行一次和重复执行两种 public cla ... -
几种创建LayoutInflater对象的方法
2011-09-28 00:51 1903LayoutInflater layoutInflate ... -
判断网络类型及是否有网络
2011-09-28 00:49 2809判断当前是否有可用网络 public boolean ... -
设置全屏
2011-09-26 23:40 19451.编程方式 public void setFullS ... -
dip与px单位之间转换
2011-09-25 10:11 1663//转换dip为px public static in ... -
屏幕尺寸(高、宽)
2011-09-25 10:11 1921Display display = getWindowM ... -
判断手机外存(SD卡)状态
2011-09-25 10:07 2178public int getExternalStorag ... -
SQLite数据类型
2011-09-25 10:03 9371一般数据采用的固 ... -
使用WebView实现腾讯微博OAuth登录
2011-09-24 21:11 4905接着上一篇文章"使用WebView实现新浪微博OAu ... -
使用WebView实现新浪微博OAuth登录
2011-09-20 12:18 8522#新浪官方下载SDK(weibo4android) h ... -
高效率下载图片——防止内存溢出
2011-09-18 13:09 2245在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非 ... -
PopupWindow使用
2011-09-16 14:05 1841使用PopupWindow来显示一个浮层 点击按钮后弹出 ... -
Android通知
2011-09-07 17:56 1941private void showNotification() ... -
AlarmManager.RTC和ELAPSED_REALTIME的区别
2011-09-04 17:33 30078AlarmManager.RTC,硬件闹钟,不唤醒手机( ... -
开机自启动
2011-09-04 13:55 1660经常会有这样的需求,当手机开机后立刻启动一个服务或者一个活动。 ...
相关推荐
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
开发者可以通过阅读和分析这些代码来学习如何在Service中正确地使用Toast,同时理解多线程和UI更新的规则。 此外,了解如何调试和跟踪Service中的问题也是很重要的。Android Studio提供了强大的工具,如Logcat,...
对Android Service Framework进行简单的剖析
通过以上分析,我们可以了解到Service在Android应用开发中的重要性,以及如何合理地使用和管理Service。实际开发中,开发者应结合具体需求,灵活运用Service的各种特性,提高应用的稳定性和效率。
在Android应用开发中,"Service" 是一个非常重要的组件,它允许程序在后台长时间运行,即使用户已经离开了应用程序。在给定的标题"Android service"中,我们可以理解为讨论的是如何利用Android服务来实现特定的功能...
本篇我们将深入探讨“android service”这个主题,结合提供的标签“源码”和“工具”,我们将分析Service的工作原理、如何创建及使用,以及相关的开发工具。 首先,Service的生命周期是由系统管理和控制的,主要...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户界面关闭仍然可以...通过深入研究和分析这个Demo,开发者能够更好地掌握Android服务的运用,从而提高应用的性能和用户体验。
Service的源码分析对于深入理解Android系统的工作原理和优化应用性能至关重要。本篇将详细介绍Android Service的源码学习及其关键知识点。 首先,我们来了解Service的基本生命周期。在Android中,Service的启动与...
通过分析这些代码,开发者可以更深入地理解如何在实际项目中实现Service驱动的断点续传下载功能。记得在实际开发中,还要考虑内存管理、多任务并发控制、下载速度优化等其他因素,以提升整体性能和用户体验。
**Android核心分析(09):** Zygote Service是Android系统中负责创建应用程序进程的关键服务。这部分内容讲解了Zygote进程的创建机制及其如何为后续的应用程序提供初始环境。 #### 八、GWES基本原理 **Android核心...
通过分析这个DEMO,开发者不仅能学习到如何创建和管理Service,还能理解如何在实际应用中处理与Service相关的各种情况,例如处理长时间运行的任务、交互式服务和保持Service的可见性等。这个DEMO是学习和实践Android...
在文件"TestUnDead"中,可能是包含了一个测试不死Service的示例代码,通过查看和分析这个代码,我们可以更具体地了解上述策略是如何实施的。这包括Service类的定义、BroadcastReceiver的配置、进程设置、通知创建...
以上就是对Android中`startService`的详细分析。理解并恰当使用`startService`对于开发高效且用户体验良好的Android应用至关重要。在实际开发中,要根据需求选择合适的服务类型,同时注意性能优化和电池消耗,以提供...
本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的差异。 首先,我们要了解Service的两种主要类型:`START_STICKY`和`START_NOT_STICKY`。这两种启动模式对Service的行为...
在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行,即使用户与应用程序的交互界面已经关闭。这篇博客"Android_Service1"深入探讨了`Service`的相关知识,以下是对这些知识点的...
本篇文章将深入探讨Service的两种主要应用:`startService`和`bindService`,并结合提供的源码分析进行详细解释。 首先,`startService`是启动一个Service的方式,它适合那些不需要与启动Service的应用组件直接交互...
在Android应用开发中,`Service` 是一个非常重要的组件,用于执行长时间运行的操作,比如后台音乐播放、网络通信等。本篇文章将详细讲解 `startService` 和 `bindService` 这两种启动 `Service` 的方式,以及它们...
本教程将深入探讨如何正确地停止一个Android Service,同时结合源码分析其内部机制。 首先,理解Service的生命周期至关重要。Service的启动有两种方式:startService()和bindService()。startService()用于启动一个...
在Android系统中,Service是一种关键组件,用于在后台执行长期运行的任务,比如音乐播放或后台数据同步。然而,Service并不是一个独立的线程,而是运行在应用程序的主线程上,这意味着如果你在Service中直接执行耗时...