`
isiqi
  • 浏览: 16482761 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android 使用 aidl 文件创建服务示例

阅读更多

android中的服务与其他软件的服务可能有些不同,它用来实现在后台执行长期的任务,并且与前台界面解耦.现在来实现一个HelloWorld级的服务以及使用这个服务,创建一个服务的步骤如下:

  1.编写aidl文件,在这个文件中提供了服务所提供的方法的接口,文件的扩展名为aidl,在我们的示例中命名为IDataTimeService.aidl文件的内容为如下所示:

  Java代码

  package com.services.demo2;

  // Declare the interface.

  interface IDataTimeService {

  String getForecastPage();

  }

  package com.services.demo2;

  // Declare the interface.

  interface IDataTimeService {

  String getForecastPage();

  }

  2.编写服务的实现类,在这个示例中为DataTimeService.java,内容如下:

  Java代码

  public class DataTimeService extends Service{

  public static final String BROADCAST_ACTION = "com.services.demo2.DataTimeServiceEvent";

  /**

  使用上面定义的字符串常量创建一个Intent的实例,如果服务在运行的过程中发生的事件都可以通过Service的

  sendBroadcast(broadcast)方法来发送一个广播消息通知Activity,然后有Activity注册的接收者进行处理;

  */

  private Intent broadcast = new Intent(BROADCAST_ACTION);

  sendBroadcast(broadcast);

  private final IDataTimeService.Stub binder = new IDataTimeService.Stub() {

  public String getForecastPage() {

  return (getForecastPageImpl());

  }

  };

  synchronized private String getForecastPageImpl() {

  Date date=new Date();

  return (date.toLocaleString());

  }

  @Override

  public IBinder onBind(Intent intent) {

  return (binder);

  }

  }

  public class DataTimeService extends Service{

  public static final String BROADCAST_ACTION = "com.services.demo2.DataTimeServiceEvent";

  /**

  使用上面定义的字符串常量创建一个Intent的实例,如果服务在运行的过程中发生的事件都可以通过Service的sendBroadcast(broadcast)方法来发送一个广播消息通知Activity,然后有Activity注册的接收者进行处理;

  */

  private Intent broadcast = new Intent(BROADCAST_ACTION);

  sendBroadcast(broadcast);

  private final IDataTimeService.Stub binder = new IDataTimeService.Stub() {

  public String getForecastPage() {

  return (getForecastPageImpl());

  }

  };

  synchronized private String getForecastPageImpl() {

  Date date=new Date();

  return (date.toLocaleString());

  }

  @Override

  public IBinder onBind(Intent intent) {

  return (binder);

  }

  }

  3.现在编写一个Activity,来消费这个服务:

  Java代码

  public class ServicesDemo2 extends Activity {

  private IDataTimeService service = null;

  private Intent serviceIntent = null;

  private WebView browser;

  private ServiceConnection svcConn = new ServiceConnection() {

  public void onServiceConnected(ComponentName className, IBinder binder) {

  service = IDataTimeService.Stub.asInterface(binder);

  browser.postDelayed(new Runnable() {

  public void run() {

  updateForecast();

  }

  }, 1000);

  }

  public void onServiceDisconnected(ComponentName className) {

  service = null;

  }

  };

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  browser = (WebView) findViewById(R.id.webkit);

  serviceIntent = new Intent(this, DataTimeServiceImpl.class);

  //绑定一个服务

  bindService(serviceIntent, svcConn, BIND_AUTO_CREATE);

  }

  @Override

  public void onResume() {

  super.onResume();

/**

  注册广播消息的接收者,在android中服务与Activity的通信依靠广播发送消息,然后由Activity注册的接收者

  接收到消息,进行相应的处理这里使用DataTimeServiceImpl.BROADCAST_ACTION来过滤,表明它只接收

  DataTimeService中的调用sendBroadcast(broadcast)发送的广播消息;

  */

  registerReceiver(receiver, new IntentFilter(

  DataTimeServiceImpl.BROADCAST_ACTION));

  }

  @Override

  public void onPause() {

  super.onPause();

  unregisterReceiver(receiver);

  }

  @Override

  public void onDestroy() {

  super.onDestroy();

  unbindService(svcConn);

  }

  private void updateForecast() {

  try {

  String page = service.getForecastPage();

  if (page != null) {

  browser.loadDataWithBaseURL(null, page, "text/html", "UTF-8",

  null);

  browser.postDelayed(new Runnable() {

  public void run() {

  updateForecast();

  }

  }, 1000);

  }

  } catch (final Throwable t) {

  svcConn.onServiceDisconnected(null);

  }

  }

  //接收者实例

  private BroadcastReceiver receiver = new BroadcastReceiver() {

  public void onReceive(Context context, Intent intent) {

  runOnUiThread(new Runnable() {

  public void run() {

  updateForecast();

  }

  });

  }

  };

  }

分享到:
评论

相关推荐

    Android使用AIDL完成自定义对象的远程传递示例

    AIDL文件是一种接口定义文件,它允许我们声明方法签名,这些方法将在服务和客户端之间使用。当我们定义了一个接口,Android会自动生成相应的Java代理类,供客户端和服务端使用。 1. 创建AIDL文件 在项目中创建一个...

    android之AIDL示例代码

    2. **创建AIDL文件**:首先,你需要在项目的res目录下创建一个.aidl文件,例如`IAidlInterface.aidl`。在这个文件中,定义接口及其方法,例如: ``` interface IAidlInterface { void sendMessage(int msg); ...

    android 使用AIDL和远程服务实现进程通信的学习

    1. 首先,在你的项目中创建一个新的AIDL文件,例如`IAidlService.aidl`。 2. 在这个文件中,你可以定义接口和它的方法。例如: ```aidl package com.example.myapp; interface I AidlService { void ...

    Android使用AIDL完成简单的远程加法计算示例

    首先,我们需要创建一个AIDL文件。在Android Studio项目中,通常在`src/main/aidl`目录下新建一个名为`IRemoteCalculator.aidl`的文件。在这个文件中,我们将定义一个接口,包含一个远程加法的方法: ```java ...

    Android使用AIDL实现进程间通信

    创建AIDL文件: 1. 在Android项目中,创建一个新的文件,扩展名为`.aidl`。例如,我们创建一个名为`IAidlService.aidl`的文件。 2. 在AIDL文件中,定义接口及其方法。这些方法参数和返回类型必须是Android支持的跨...

    android studio aidl demo

    在Android Studio中,创建AIDL文件通常是在服务(Service)所在的目录下新建一个`.aidl`扩展名的文件。例如,我们可以创建一个名为`IAidlInterface.aidl`的文件,然后在其中定义服务的接口方法: ```aidl package ...

    Android中aidl开发简单示例

    创建AIDL文件是使用它的第一步。在这个示例中,可能会有一个名为`IAidlInterface.aidl`的文件,其中定义了服务端提供的接口。例如: ```java interface IAidlInterface { void sendMessage(int msg); String ...

    AndroidAIDL

    - 编译AIDL文件:Android编译器会将AIDL文件转换为对应的Java接口和辅助类。 - 创建Stub:服务端会生成一个实现了该接口的Stub代理类,该类继承自 Binder 类,并实现了接口中的所有方法。 - 绑定服务:客户端通过...

    android 进程之间通信--Android 使用【AIDL】调用外部服务

    首先,在Android项目的src/main/aidl目录下创建一个新的AIDL文件,例如`IRemoteService.aidl`。在这个文件中,你可以定义服务提供的接口方法,如: ```aidl package com.example.remoteservice; interface ...

    Android AIDL示例代码.zip

    这个“Android AIDL示例代码.zip”压缩包中包含了丰富的示例和解释,旨在帮助开发者更好地理解和运用AIDL。 AIDL的基本概念: 1. **接口定义**:AIDL用于定义接口,这些接口描述了服务提供的方法。接口定义文件以`....

    IDEA创建AIDL示例

    3. 在`aidl`目录下,创建一个新的AIDL文件,例如`IAidlService.aidl`。这将自动生成一个对应的Java类,该类将在编译时生成服务端和服务客户端所需的代理类。 ```aidl package com.example.aidlexample; // 声明...

    Android aidl使用示例源码

    本示例将详细介绍如何创建并使用AIDL,包括创建aidl文件、service文件以及演示AIDL通信过程和服务的绑定。 1. **创建aidl文件** - 在你的Android项目的`src/main/aidl`目录下创建一个新的接口文件,例如`...

    Android aidl远程服务代码

    - **创建AIDL文件**:在项目的src/main/aidl目录下创建一个.aidl文件,定义服务接口。 - **定义接口**:在AIDL文件中声明服务提供的方法及其参数类型。 - **编译AIDL**:Android Studio会自动生成对应的Java接口和...

    Android的AIDL例子

    - 定义AIDL接口:首先创建一个AIDL文件,例如`IAidlService.aidl`,声明服务提供的方法。 - 实现接口:在服务器端,创建一个类实现`IAidlService`接口,并提供实际的业务逻辑。 - 注册服务:在`AndroidManifest.xml`...

    Android Aidl

    AIDL文件以`.aidl`为扩展名,它定义了服务提供的接口。例如,在`IAidlInterface.aidl`文件中,我们可以看到类似以下的代码: ```aidl package com.example.aidldemo; interface I AidlInterface { void ...

    Android AIDL 示例代码

    本示例代码将展示如何使用AIDL来创建服务并进行进程间的交互。 首先,我们需要了解AIDL的基本概念。AIDL定义了一种接口,它类似于Java接口,但增加了类型安全和进程边界的支持。当你在AIDL文件中声明一个方法,...

    Android service aidl编写示例(Android Studio/eclipse)

    AIDL文件会自动生成Java绑定类,用于在Java代码中进行进程间通信。 五、在Eclipse中创建Service和AIDL 1. 创建Service:在Eclipse中,需要手动创建一个新的Java类,然后继承自`android.app.Service`。接着,实现`...

    Android服务、aidl接口demo

    - 定义接口文件:创建一个.aidl文件,声明方法和参数类型。 - 生成 Binder 类:编译后,Android 编译器会自动生成对应的Java接口和Binder类。 - 实现服务端:服务端实现AIDL接口,并在服务中返回该接口的Binder...

    android AidlDemo(简单aidl的例子)

    - Android编译系统会将AIDL文件转换成Java代码,生成一个实现了该接口的抽象类,开发者需要继承这个抽象类并实现其中的方法。 4. **服务端实现** - 服务端需要实现AIDL接口,并在服务的onBind()方法中返回实现了...

    Android aidl Binder框架浅析

    当我们编写一个.aidl文件时,Android编译器会自动生成对应的Java接口和Stub类,这些类实现了跨进程通信的必要逻辑。 例如,假设我们有一个简单的`IService.aidl`文件: ```aidl interface IService { void send...

Global site tag (gtag.js) - Google Analytics