- 浏览: 365923 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
驭乐MJ:
你好,我卸载rar后,按命令执行安装unrar或者是p7zip ...
Ubuntu rar 乱码问题 -
郭建雄:
不错,受用了,谢谢你的分享 !
java线程中的interrupt,isInterrupt,interrupted方法 -
zuosheng:
...
用ViewFlipper实现各种切换动画 -
lxtkong-029:
原来一直不是很清楚,看来你的文章明白了,太感谢了!
java线程中的interrupt,isInterrupt,interrupted方法 -
ihopethatwell:
嗯,看到了,要在项目中添加jni
Ubuntu 10.04安装android NDK
1、要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的。目前学到的方法有两种
方法一:<service android:enabled="true" android:name=".PlayService" />
方法二:<service android:name=".PlayService" />
点后面是Service类的名字。
2、工程包括两个类:
ServiceActivity.java
PlayService.java
其中:ServiceActivity.java定义了两个按钮,分别控制音乐的播放与停止。
用startService和stopService完成Activity与Service之间的切换,启动Service以及取消Service,
如果不用按钮,可以在Activity的OnCreate和OnDestrpy里面启动和取消Service,如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.startService(new Intent(this, PlayService.class));
}
@Override
protected void onDestroy() {
super.onDestroy();
this.stopService(new Intent(this,PlayService.class));
}
在activity里面,如果需要使用Service的话,需要调用startService(),从而利用startService()去调用Service中的OnCreate()和onStart()方法来启动一个后台的Service。
启动一个Service的过程如下:context.startService() ->onCreate()->onStart()->Servicerunning其中onCreate()可以进行一些服务的初始化工作,onStart()则启动服务。
停止一个Service的过程如下:context.stopService() |->onDestroy() ->Service stop
创建Service需要继承自 android.app.Service 的类,然后重新实现在Service各个状态要回调的方法,Service的回调方法有三个,分别是:
- onCreate() 创建
- onStart() 开始
- onDestry() 释放
注意:Service是不能自己启动的,只有通过 Context 对象 调用startService和bindService方法来启动。也就是说Service不能自己调用的,所以我们看见很多Service都是用Activity调用的。
(1)Context.startService():Service会经历onCreate -> onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),他都会被停止。补充说明:传递给startService()的Intent对象会传递给onStart()方法。调用顺序为:onCreate --> onStart(可多次调用) --> onDestroy。
(2)Context.bindService():Service会经历onCreate() -> onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind -> onDestroyed相应退出,所谓绑定在一起就共存亡了。
补充说明:传递给bindService()的Intent对象会传递给onBind(),传递给unbindService()的Intent对象会传递给onUnbind()方法。调用顺序为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
(3)注意事项:在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。还有一点,目前我没有遇到过需要startService和bindService交互使用的情况(我认为不会有这种需求),所以不必去考虑交互的问题,待遇到时再考虑不迟。
(4)BroadcastReceiver只能通过startService启动Service,因为广播本身生命周期很短,bind的话没有意义
PlayService.java是Service类,
包括OnCreate,OnStart,OnDestroy三种方法,
其中OnCreate可有可无,如果有,可以在这里创建与MediaPlayerd的链接。如果无,可以在Onstart里面创建这个链接。
OnCreate在音乐播放周期里面(未OnDestroy)之前,只创建一次,而每按一次播放,OnStart就会被调用一次。
OnStart,里面可以启动播放音乐,
OnDestroy,里面调用停止播放音乐。
如果按了停止按钮,会调用(或者打印Log更直观)“ServiconDestroy“,但是Activity不会退出。
当退出Activity的时候,会相继调用(或者打印Log更直观)"ActivityonStop",和"ActivityOnDestroy"此时,音乐播放是不会停止的,
可以知道,如果想让Service一启动就执行的代码,可以写在Service的OnCreate或OnStart,里面,会在启动Service的时候自动调用,与Activity自动调用OnCreate道理是一样的。
代码如下:
package com.service.su;
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;
public class ServiceActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
Button buttonOn, buttonOff;
String TAG = "ServiceActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonOn = (Button) findViewById(R.id.button_on);
buttonOff = (Button) findViewById(R.id.button_off);
buttonOn.setOnClickListener(this);
buttonOff.setOnClickListener(this);
Log.v(TAG, "ActivityonCreate");
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case (R.id.button_on):
Log.v(TAG, "ActivitystartService");
this.startService(new Intent(this,PlayService.class));
// startService(new Intent(this, PlayService.class));
break;
case (R.id.button_off): {
Log.v(TAG, "ActivitystopService");
this.stopService(new Intent(this,PlayService.class));
//stopService(new Intent(this, PlayService.class));
}
break;
default:
break;
}
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v(TAG, "ActivityonStop");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "ActivityonDestroy");
super.onDestroy();
}
}
package com.service.su;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class PlayService extends Service {
String TAG = "ServiceActivity";
MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Toast.makeText(this, "Play Service Created", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiceonCreate");
mediaPlayer = MediaPlayer.create(this, R.raw.test);
/*
* 要用MediaPlayer来创建,不能用MediaPlayer的对象来创建 // 不用带后缀 mediaPlayer = new
* MediaPlayer(); mediaPlayer.create(this, R.raw.test);
*/
/*
* try { mediaPlayer.setDataSource("/sdcard/music/lost times.mp3");
* mediaPlayer.prepare();
* //方法二,从网上的链接获取歌曲 try { mediaPlayer.setDataSource(
* "http://www.yousss.com/uploadfile/mp3/2007-11/20071129134414713.mp3"
* );
*/
// mediaPlayer.setLooping(true);
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
/*
* //可以在OnCreate里面创建与音乐的链接,也可以在OnStart里面创建 mediaPlayer =
* MediaPlayer.create(this, R.raw.test);
*/
Toast.makeText(this, "Play Service onStart", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiceonStart");
mediaPlayer.start();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "Play Service Stopped", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiconDestroy");
mediaPlayer.stop();
}
}转自:http://www.cnblogs.com/snowdrop/articles/1807083.html
发表评论
-
通过FutureTask设置超时,用于请求网络,执行任何异步超时任务
2013-10-10 15:53 0public class TestConnectTimeOu ... -
使用Eclipse调试Android Native Application
2013-07-08 21:31 0由于最近需要调试C++程序,以后都是暴力调试的,暴力调 ... -
Android新版NDK环境配置(免Cygwin)
2013-07-05 08:41 0前言:Android NDK r7及以上的版本已经集成 ... -
scroller 滚动效果
2013-04-25 14:22 0package com.testalaph; i ... -
点9 ondraw bitmap
2013-04-17 14:26 0private void init(Context ... -
点9 ondraw bitmap
2013-04-17 14:20 0点9图片ondraw画: private void ... -
通过activityGroup动态管理activity
2013-01-20 15:54 0// @Override // protected v ... -
scroller text view 滚动文字
2012-12-08 10:18 0package com.sc; import an ... -
android 截屏
2012-11-05 14:16 0//截屏2 private Bitmap jieping2 ... -
Android下Dialog及Activity屏蔽Home键详解
2011-12-13 11:53 0屏蔽其他键,重写onKeyDown Java代码 ... -
clipRect 介绍
2011-12-02 14:13 6729android的clip有以下两点疑问: Clip(剪切)的 ... -
android知识整理
2011-11-03 10:06 11. android单实例运行方 ... -
Android 使用junit测试
2011-08-05 16:18 954使用方式也非常的简单,只需要在AndroidManifest ... -
Android开发:调试工具集
2011-08-05 15:07 18341. 查看当前堆栈1) 功能:在程序中加入代码,使可以在log ... -
Android中attr自定义属性详解
2011-07-12 16:23 38788<LinearLayout xmlns:android= ... -
Drawable Mutations(Android Drawable 深入分析)
2011-07-11 11:08 1658Android's drawables对编写 ... -
检查系统是否安装某app
2011-07-11 10:45 965/** * Indicates whether th ... -
ImageView的scaletype属性
2011-07-07 13:21 862ImageView的属性android:scaleType ... -
Android UI --- 设置ProgressBar的颜色
2011-07-04 14:26 1286基本原理是在drawable目录中建立一个xml文件,描述一下 ... -
关于android的ListView优化
2011-06-24 16:58 11241.去除ListView的黑色间隔线 vie ...
相关推荐
本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android应用中创建和使用Service。 首先,我们来了解一下Service的基本概念。Service主要分为两种类型:标准Service和IntentService。标准...
本篇文章将深入探讨`startService`类型的Android Service,通过一个简单的实例来展示其工作原理和使用方法。 `Service`分为两种主要类型:`Start Service`和`Bound Service`。`Start Service`主要用于执行非交互式...
总之,Android Service和EventBus的结合使用为Android应用提供了强大的后台处理和界面更新能力。Service负责后台任务,EventBus则作为通信桥梁,使得数据在Service和界面之间传递变得更加简单和高效。在实际项目中,...
这篇博客文章将深入介绍Android Service类的基本概念、功能、生命周期以及如何在实际应用中使用。 首先,Service不同于Activity,Activity是用户可见且可交互的组件,而Service则是隐藏在后台运行,它不包含用户...
无论是Local Service的简单后台任务处理,还是Remote Service的跨进程通信,或者是BroadcastReceiver的事件监听,都是Android开发中不可或缺的知识点,理解并掌握它们对于提升应用的功能性和稳定性至关重要。
我们可以在Service的onStartCommand()或onBind()方法中创建新的线程,如使用Handler、AsyncTask或者Thread/Runnable。这样可以确保Service的后台任务不会影响到用户界面的响应速度。 4. AIDL方式的Service AIDL...
通过以上分析,我们可以了解到Service在Android应用开发中的重要性,以及如何合理地使用和管理Service。实际开发中,开发者应结合具体需求,灵活运用Service的各种特性,提高应用的稳定性和效率。
总结来说,Android Service根据其启动模式和使用场景有不同的行为和生命周期管理。开发者需要根据实际需求选择合适的启动模式,并注意系统对后台服务的限制。在设计Service时,应尽量减少对CPU和内存的占用,避免...
这种通信方式适用于Service与Activity之间的简单交互,如果需要更复杂的交互,可以考虑使用AIDL(Android Interface Definition Language)。 在提供的" MessengerTest "文件中,可能包含了示例代码,用于演示如何...
在本教程中,我们将探讨如何在Android中创建并使用一个简单的Service。 首先,让我们理解Service的基本概念。Service生命周期包含几个关键方法,它们是onCreate()、onStartCommand()、onBind()、onUnbind()和...
本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们需要创建一个服务类(Service)来处理下载任务。在Android Studio中,可以通过右键点击...
在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...
在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行操作,即使用户已经离开或关闭了应用界面。本教程将详细讲解如何利用Android的`Service` 组件来实现文件下载功能。 一、...
综上所述,这个"android 录音机 service 例子"将涉及Android Service的使用,MediaRecorder的音频录制功能,以及BroadcastReceiver和通知栏的运用。通过对这些知识点的深入理解和实践,开发者可以创建出能够后台录音...
Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、BroadcastReceiver和ContentProvider,它们在Android应用开发中的作用和使用场景各不相同。Service的作用主要体现在...
总结来说,要在Android Service中弹出对话框,需要创建一个兼容Service的Context,使用新线程或Handler来显示Dialog,并根据Service的生命周期进行适当的管理。对于复杂的需求,可以考虑使用DialogFragment。同时,...
本示例将探讨“startService”方式启动Android服务的基本概念、工作原理以及如何实现一个简单的服务示例。 首先,我们需要理解`startService()`这个方法。当你调用`startService()`时,Android系统会启动指定的服务...
本教程将深入讲解如何在Android应用中使用`Service`以及数据序列化的相关知识。 首先,我们来看`Service`的使用。创建一个`Service`需要继承`android.app.Service`类,并重写其生命周期方法,如`onCreate()`, `...
在Android开发中,远程服务(Remote Service)是一种可以让应用程序组件在其他进程中运行的服务,通常用于实现跨进程通信(IPC,Inter-Process Communication)。这个概念是Android系统为了支持不同应用之间的数据...
总结起来,Android中的Bound Service是一种允许应用程序组件与服务进行交互的服务类型,通过`IBinder`接口进行通信,提供了一种更加灵活且高效的服务使用方式。理解并熟练掌握Bound Service的实现和使用,对于开发...