两部分ControlService.java(Activity)和MyService.java(Service)
MyService.java
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
/* 建立Handler对象,作为线程传递 postDelayed之用 */
private Handler objHandler = new Handler();
/* 为确认系统服务执行情况 */
private int intCounter = 0;
/* 成员变量mTasks为Runnable对象,作为Timer之用 */
private Runnable mTasks = new Runnable() {
/* 执行线程 */
public void run() {
/* 递增counter整数,作为后台服务运行时间识别 */
intCounter++;
/* 以Log对象LogCat里输出log信息,监看服务执行情况 */
Log.i("HIPPO", "Counter:" + Integer.toString(intCounter));
/* 每1秒调用Handler.postDelayed方法反复执行 */
objHandler.postDelayed(mTasks, 1000);
}
};
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
public void onCreate() {
/* 服务开始,调用每1秒mTasks线程 */
objHandler.postDelayed(mTasks, 1000);
super.onCreate();
}
public IBinder onBind(Intent intent) {
/* IBinder方法为Service建构必须重写的方法 */
return null;
}
public void onDestroy() {
/* 当服务结束,移除mTasks线程 */
objHandler.removeCallbacks(mTasks);
super.onDestroy();
}
}
ControlService.java
public class ControlService extends Activity {
private Button mButton01, mButton02;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.control_service);
mButton01 = (Button) findViewById(R.id.myButton1);
/* 开始启动系统服务按钮事件 */
mButton01.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
/* 建构Intent对象,指定开启对象为mService1服务 */
Intent i = new Intent(ControlService.this, MyService.class);
/* 设定新TASK的方式 */
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/* 以startService方法启动Intent */
startService(i);
}
});
mButton02 = (Button) findViewById(R.id.myButton2);
/* 关闭系统服务按钮事件 */
mButton02.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
/* 构造Intent对象,指定欲关闭的对象为mService1服务 */
Intent i = new Intent(ControlService.this, MyService.class);
/* 以stopService方法关闭Intent */
stopService(i);
}
});
}
}
manifest.xml
<activity
android:name=".ControlService"
android:label="@string/app_name">
</activity>
<service
android:name=".MyService"
android:exported="true"
android:process=":remote"></service>
注意:1.service必须写在该activity之后 2.必须为service定义android:exported="true",使该服务能被其他程序访问
- 大小: 29.8 KB
分享到:
相关推荐
开始服务时,调用`onStartCommand(Intent intent, int startId, int flags)`(在较新版本中替换`onStart(Intent intent, int startId)`);服务销毁时,调用`onDestroy()`方法。值得注意的是,`onCreate()`和`...
服务一旦启动,就会持续运行,直到被系统或应用自身停止。在AndroidManifest.xml中声明Service后,我们可以通过Context.startService()方法启动Service。服务运行期间,应用可以随时调用stopService()来停止服务。 ...
- **开始服务(onStart())**:当服务被启动时,系统会调用`onStart()`方法。如果服务已经处于活动状态,则此方法不会被调用。此方法可以被多次调用,每次调用都会接收一个`Intent`对象和一个`int`类型的`startId`,...
Service是Android系统中的一个重要组件,它允许应用程序在后台长时间运行操作,即使用户界面不在活动状态。在本实训任务中,我们将深入理解并实践如何创建、启动和停止Service。 首先,我们要了解Service的生命周期...
在Android系统中,服务(Service)和广播接收者(BroadcastReceiver)是两个核心组件,它们在后台执行任务和实现跨应用程序通信。本教程将深入探讨如何利用这两种组件来实现手机背景的定时切换功能,比如根据用户...
`IntentService`是`Service`的一个子类,它自动管理线程并处理完工作后自动停止服务,简化了服务的生命周期管理。 2. **定义工作逻辑** 在`onHandleIntent()`方法中,实现发送请求和解析响应的逻辑。可以使用`...
前台服务会在通知栏显示一个通知,这样系统就会知道Service正在与用户交互,从而允许显示Dialog。 6. **使用DialogFragment**: 对于更复杂的对话框,可以使用DialogFragment。虽然DialogFragment主要用于Activity...
Service有两种启动方式:通过startService()启动的服务会一直运行,直到服务自行停止或被系统销毁;而通过bindService()启动的服务与客户端绑定,只有在所有客户端解绑后才会停止。 结合这些概念,当需要按时间顺序...
`onStartCommand()`则在每次调用`startService()`启动服务时被调用,返回值定义了服务应该如何处理系统停止服务的请求。 在服务中执行任务通常是在`onStartCommand()`或`onCreate()`中启动一个新线程,避免阻塞主线...
它可能调用了`ServerSocket`的`bind()`和`accept()`方法来开始服务。 7. **ConnectionHandler.java**: 这个类可能是用来处理客户端连接的处理器,一旦服务器接受到新的连接,就会创建一个新的`ConnectionHandler`...
用户即使关闭了应用程序,音乐也会继续在后台播放,直到用户手动停止或者服务被系统因内存不足而结束。这是一个基础的实现,实际应用中可能还需要添加更多功能,如处理音频焦点变化、通知栏控制等。
当Activity退出或销毁时,务必调用`unbindService()`来解除与Service的绑定,这将断开连接并允许系统回收Service资源。 通过以上步骤,我们可以实现Service与Activity之间的数据绑定,从而实现在后台运行的Service...
`IntentService`更适合执行一次性任务,它会自动在线程中处理任务,并在任务完成后自动停止服务,而`Service`则需要手动控制生命周期。在这里,我们选择`IntentService`,因为它更适用于后台下载这样的任务。 ```...
【服务播放器】是针对Android平台开发的一款基础音乐播放应用,...总之,【服务播放器】是一个适合初学者学习Android服务和多媒体播放的项目,通过逐步扩展其功能,可以深入理解Android系统的组件通信和服务管理机制。
在Service中,可以通过`startForeground()`方法显示一个通知,告知用户Service正在运行,以满足Android系统的前台服务要求。 6. **处理位置数据** 获取到经纬度后,你可以进行各种操作,比如存储到数据库、更新UI...
启动的`Service`会一直运行直到停止(stopSelf或stopService),而绑定的`Service`则与绑定它的组件一起存在,当所有组件解绑后,`Service`会被销毁。 接着,`Thread`在Android中用于实现多线程,它是程序执行的...
6. `onBind()`方法用于提供 Binder 对象,当其他组件(如 Activity 或 Service)需要与服务进行交互时调用。在这个例子中,返回 `null` 表示服务不支持绑定。 ```java @Nullable @Override public IBinder onBind...
开发者应确保服务能够妥善处理被系统中断的情况,并在适当的时候停止服务以节省资源。此外,过度使用后台服务可能导致应用被用户或系统标记为“电池杀手”。 总结,这个“android后台服务例子”涵盖了Android服务的...