- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个与此相关的问题 question @mnish 大约一年前问过这个问题。
请看一下他的问题和代码。他实现了一个 ServiceConnection() 并将其传递给 bindService()。这遵循 Service 中的本地服务示例靠近顶部的文档。
我想实现本地服务示例,因此我尝试添加来自@mnish 问题/答案的一些细节。在 ServiceConnection() @mnish 中有这一行让我感到困惑:
mService = ILocService.Stub.asInterface(iservice);
我知道 @mnish 写了这段代码,但是有没有人知道 ILocService 是什么以及我如何创建自己的 ILocService?这个构造在哪里记录,我需要它吗?另外,IBinder iservice 的值(value)从何而来?
最佳答案
他可能正在使用 Android 接口(interface)定义语言 (AIDL) http://developer.android.com/guide/components/aidl.html
因此,他必须像记录的那样使用服务器端实现的 stub :
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. We are communicating with our
// service through an IDL interface, so get a client-side
// representation of that from the raw service object.
mService = IRemoteService.Stub.asInterface(service);
iservice 引用来自 onServiceConnected 方法,该方法在将服务绑定(bind)到您的 Activity 后调用。调用 bindService 传递给实现 onServiceConnected 方法的 ServiceConnection。
当您在本地实现服务时,您不需要“IRemoteService.Stub.asInterface(service)”,然后您可以将服务转换为本地服务。
本地服务示例在服务中执行此操作:
public class LocalService extends Service {
private NotificationManager mNM;
// Unique Identification Number for the Notification.
// We use it on Notification start, and to cancel it.
private int NOTIFICATION = R.string.local_service_started;
/**
* Class for clients to access. Because we know this service always
* runs in the same process as its clients, we don't need to deal with
* IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
return LocalService.this;
}
}
...
}
在 ServiceConnection 类的 Activity 中:
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
mBoundService = ((LocalService.LocalBinder)service).getService();
// Tell the user about this for our demo.
Toast.makeText(Binding.this, R.string.local_service_connected,
Toast.LENGTH_SHORT).show();
}
public void onServiceDisconnected(ComponentName className) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
// Because it is running in our same process, we should never
// see this happen.
mBoundService = null;
Toast.makeText(Binding.this, R.string.local_service_disconnected,
Toast.LENGTH_SHORT).show();
}
};
关于Android 本地服务示例、bindservice() 和 ServiceConnection(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399274/
无法清除输出流:java.net.SocketException:关闭失败:EBADF(错误文件编号) 有没有人得到这个,有没有解决这个异常的方法? 最佳答案 这可能意味着您没有写入该文件的权限或者它
我很困惑。 我有一个我认为需要实现服务的应用程序。该服务特定于应用程序;当应用程序实际死亡或被手动终止时,该服务就会消失。应用程序将与服务保持持续通信,最好是通过服务本身的 Activity 调用方法
调用时出现以下异常: requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 2089-2089/? E/ActivityThread﹕ Se
这是调用我的服务的类: public class TicketList extends ListActivity { private ArrayList alTickets = new ArrayLi
我尝试将代码集成到 Blundell's in-app purchasing example 中进入我自己的应用程序,它几乎可以正常工作。我做了一个名为 shop.java 的 Activity ,它
我在我的应用程序中使用 TTS。在 onPuase 方法期间,我使用以下代码停止引擎。问题是每当我暂停 Activity 说使用主页按钮时,我都会收到粘贴在日志猫部分中的错误。我从日志 cat 中了解
我在搞乱 Android 服务,我发现当我绑定(bind)到服务时,ServiceConnection.onServiceConnected() 会被相当可预测地调用。 但是,我的 onService
我有一个带有私有(private)字符串属性的MainActivity。在我的代码中,我有以下内容: private ServiceConnection mTransactionServiceConn
我打开一个应用程序做了一些事情,然后应用程序崩溃了。我再次打开它并收到此错误。我想知道这个错误的原因和解决方法。谁能帮忙。 15 01:25:59.698 31122-31122/com.my
我在 SO 上找到并阅读了各种帖子,其中提到您应该使用 getApplicationContext()绑定(bind)到 Service 时- 而不是 this (在 Activity 中)或 get
我正在开发绑定(bind)到本地服务的 Activity (在 Activity 的 onCreate 中): bindService(new Intent(this, CommandService.
我有一个与此相关的问题 question @mnish 大约一年前问过这个问题。 请看一下他的问题和代码。他实现了一个 ServiceConnection() 并将其传递给 bindService()
我有几个 Android Service,我想在我的 Activity 中绑定(bind)它们,因此我可以监视用户的多个操作。 为了能够绑定(bind)每个服务,我将有多个服务,我是否需要在我的 Ac
我正在使用启动 IntentService 的 BraodCastReceiver。一切看起来都很好,但我收到这个错误,我不知道它的来源: android.app.ServiceConnectionL
我有一个在启动时使用文字转语音的应用程序。一切似乎都运行良好,运行该应用程序时我没有遇到任何问题。但是,每次应用程序启动时,我都会收到一个 LogCat 错误,提示我的文本到语音转换中存在泄漏的 Se
我有一个非常简单的 Activity : public class MainActivity extends Activity { private Intent serviceInt
我正在使用 AIDL 在客户端 Activity 和服务之间执行 IPC。 ServiceConnection.onServiceConnected() 似乎在使用 bindService() 绑定(
我让这个应用程序监听传入的消息并大声朗读它们。问题是我退出时出现以下错误 12-21 15:45:29.949: E/ActivityThread(566): Activity mo.rach.col
能否请您向我解释一下,当我们绑定(bind)到服务但从不启动它然后解除绑定(bind)时会发生什么?我收到“Activity 泄露了一个服务连接错误”,但我不明白为什么。 我的服务: 包 com.ex
我在这里查看 Android 应用内结算教程: http://developer.android.com/guide/google/play/billing/billing_integrate.htm
我是一名优秀的程序员,十分优秀!