Service类与 Activity类的原理类似,只是Service类并不像Activity一样提供与用户交互的表示层。Service是一种后台运行的Android组件,位于android.app包下。
当应用程序不需要在前台显示某些界面时,可以使用Service来完成,比如后台的数据计算,后台音乐播放等。
这个小例子是同时介绍Service组件与BroadcastReceiver组件联合使用的方法,在例子中使用java代码动态注册 BroadcastReceiver 并且通过前台的用户界面控制后台服务的进行。
运行如下
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">请启动 Service</string>
<string name="app_name">xh_test_03</string>
<string name="myButton1">启动Service</string>
<string name="myButton2">停止Service</string>
</resources>
布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<TextView
android:id="@+id/myTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20px"
android:gravity="center_horizontal"
android:text="@string/hello"
/>
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/myButton1"/>
<Button
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/myButton2"/>
</LinearLayout>
Service类 MyService
package xiaohang.zhimeng;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
MyThread myThread;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
myThread.flag = false;
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
myThread = new MyThread();
myThread.start();
super.onStart(intent, startId);
}
class MyThread extends Thread {
boolean flag = true;
int c = 0;
@Override
public void run() {
while (flag) {
Intent i = new Intent("xiaohang.zhimeng.myThread");
i.putExtra("myThread", c);
sendBroadcast(i);
c++;
try {
// 睡眠指定毫秒数
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
}
Activity类 Activity01
package xiaohang.zhimeng;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class Activity01 extends Activity {
Button button1;
Button button2;
TextView myTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button) this.findViewById(R.id.myButton1);
button2 = (Button) this.findViewById(R.id.myButton2);
myTextView = (TextView) this.findViewById(R.id.myTextView);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Activity01.this, MyService.class);
startService(i);
Toast.makeText(Activity01.this, "Service启动成功",
Toast.LENGTH_SHORT).show();
}
});
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 创建Intent
Intent i = new Intent(Activity01.this, MyService.class);
stopService(i);
Toast.makeText(Activity01.this, "Service停止成功",
Toast.LENGTH_SHORT).show();
}
});
// 创建IntentFilter过滤器
IntentFilter intentFilter = new IntentFilter(
"xiaohang.zhimeng.myThread");
MyBroadcasReceiver myBroadcasReceiver = new MyBroadcasReceiver();
registerReceiver(myBroadcasReceiver, intentFilter);
}
public class MyBroadcasReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获得Intent中的数据
Bundle myBundle = intent.getExtras();
int myInt = myBundle.getInt("myThread");
if (myInt < 10) {
myTextView.setText("后台Service运行了" + myInt + "秒");
} else {
Intent i = new Intent(Activity01.this, MyService.class);
// 停止服务
stopService(i);
myTextView.setText("后台Service在" + myInt + "秒后停止运行");
}
}
}
}
最后在若弱的 提醒大家一句 服务需要在 AndroidManifest.xml中声明一下
源码见附件
- 大小: 44 KB
- 大小: 15.5 KB
- 大小: 24.4 KB
- 大小: 14.5 KB
分享到:
相关推荐
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
2、针对对普通类绑定service进行测试 3、普通类可以绑定service,但是需要activity传入一个Contex参数 4、该测试可以将业务代码和activity或者service分离,实现程序更好的结构,提高代码可读性 5、欢迎大家一起讨论...
Service在Android系统中扮演着重要的角色,它可以在后台长时间运行,即使用户离开应用界面,Service依然可以执行任务,如播放音乐、定时任务等。在QT for Android环境下创建Service,可以帮助开发者充分利用Qt的便利...
1. 创建一个新的Service类,继承自`android.app.Service`。 2. 在Service类中重写关键方法,如`onStartCommand()`和`onBind()`。`onStartCommand()`用于启动服务并返回服务的启动行为,`onBind()`用于提供与服务进行...
在Service中使用Log类记录关键步骤,可以帮助调试和理解代码执行流程。 总之,Service和Toast在Android开发中都有其独特的应用场景。理解它们的使用方法和注意事项,对于构建高效、稳定的应用至关重要。通过...
在Android Studio中,可以通过新建一个类并继承自`Service`。例如,我们可以创建一个名为`MyService`的类,并重写`onStartCommand()`方法,这里是我们执行后台任务的地方。 2. **启动Service** 在`Activity`中启动...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户界面关闭也能继续工作。本篇文章将深入探讨`startService`类型的Android Service,通过一个简单的实例来展示其工作原理和...
首先,你需要创建一个`Service`类,继承自`android.app.Service`。在`onCreate()`方法中初始化定时器,`onStartCommand()`中启动定时任务。 2. **定义TimerTask** 创建一个新的`TimerTask`类,重写`run()`方法,...
在Android开发中,Service是一种非常重要的组件,它可以在后台长时间运行,执行一些不需要与用户交互的任务。本示例中,我们关注的是如何利用Service来实现资源的异步下载,并且在下载完成后对ZIP文件进行解压。这个...
首先,Android Service是Android系统提供的一个类,允许开发者创建在后台运行的长期运行任务。Service不提供用户界面,通常用于执行如音乐播放、数据同步、后台下载等任务。Service有两种启动方式:startService()和...
1. **创建Service**:首先,我们需要定义一个Service类,继承自Android的`Service`类,并重写其生命周期方法,如`onStartCommand()`和`onDestroy()`。 2. **启动Service**:在Activity中,可以通过调用`start...
"Android Service Demo"是一个示例项目,它展示了如何在Android应用中使用Service,尤其是结合AIDL(Android Interface Definition Language)来实现进程间通信(IPC,Inter-Process Communication)。 首先,我们...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户界面不在活动状态。本文将通过四个小实例详细介绍Android Service的四种启动方式:启动方式、绑定方式、线程方式以及AIDL...
在Android应用开发中,Service是四大组件之一,它在后台长时间运行,不依赖于任何用户界面,用于执行长时间运行的任务,如播放音乐、网络通信等。这篇博客"Android Service深入解析Demo"通过实例深入讲解了Service的...
在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行操作,即使用户已经离开或关闭了应用界面。本教程将详细讲解如何利用Android的`Service` 组件来实现文件下载功能。 一、...
在Android应用开发中,Service是用于执行长时间运行操作的一个组件,比如后台下载任务。本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们...
在Service类中,`onStartCommand`是处理启动命令的主要入口,它接收Intent参数并返回一个整型值,这个返回值决定了Service的生命周期和行为。开发者通常在重写这个方法时,会进行业务逻辑处理。 防止`startCommand`...
然后,在MyService.java文件中实现Service类: ```java public class MyService extends Service { @Override public void onCreate() { super.onCreate(); // 初始化工作 } @Override public int ...
定义Service类时,需要继承自Android的`Service`类,并重写一些关键方法,如`onStartCommand()`和`onBind()`。`onStartCommand()`用于响应`startService()`调用,而`onBind()`则与`bindService()`关联,提供与...