【问题标题】:Still cannot bind to my android service仍然无法绑定到我的 android 服务
【发布时间】:2011-09-26 11:09:55
【问题描述】:

我对 Android 很陌生,我正在将 C# 程序移植到 android。大部分都很好,但我有一个长期存在的问题,即无法绑定到我的一项服务。 我想启动并绑定到服务以从服务接收 sendBroadcast(intent)。意图包括使用 sendBroadcast(intent) 在 UI 中显示的数据包,但它返回一个空指针,可能是因为它没有正确连接到活动。 我遵循了很多不同的教程,包括这个网站上的建议,所有这些似乎都相当合乎逻辑,并且据报道是有效的。 如 http://developer.android.com/reference/android/app/Service.html http://devblogs.net/2011/01/04/bind-service-broadcast-receiver/ http://www.androidcompetencycenter.com/2009/01/basics-of-android-part-iii-android-services/

错误似乎是服务未正确启动...请参阅下面的堆栈跟踪: ActivityThread.handleCreateService(ActivityThread$CreateServiceData) 行:2943 服务为空。服务中不会调用 onCreate 或 onStartCommand()。

不幸的是,我不能为此使用处理程序,因为没有从活动中调用服务类的构造函数。 如您所见,我尝试了很多事情并认真阅读了一些内容,但显然我仍然缺少一些东西。 我会给你我目前正在尝试的代码版本,它产生了上面的堆栈跟踪。这段代码没有建立在 oncreate() 的活动之上!但是来自 bindservice() 的 bool tmp 返回 true??

活动

        @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(D) Log.e(TAG, "+++ ON CREATE +++");

    // Various view initializations here

    Intent CuIntent = new Intent(this, Curve.class);
    CuIntent.setAction(".Core.CURVE_SERVICE");
    startService(CuIntent);
    Boolean tmp;
    tmp = bindService(CuIntent, CurveServiceConncetion, Context.BIND_AUTO_CREATE);


}

private ServiceConnection CurveServiceConncetion = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // TODO Auto-generated method stub

        CurveService = ((LocalBinder<Curve>) service).getService();

    }
    @Override
    public void onServiceDisconnected(ComponentName name) {

        // TODO Auto-generated method stub
        CurveService = null;
    }
};

包含服务的活动清单 xml 文件

        <application android:label="@string/app_name" android:icon="@drawable/pi_icon_t">
    <activity android:label="@string/app_name" android:name=".BTUI" android:finishOnCloseSystemDialogs="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"></action>
            <category android:name="android.intent.category.LAUNCHER"></category>
        </intent-filter>
        </activity>
    <service android:name=".Core.Curve" />
</application>

localBinder 类(一个单独的类)取自另一个教程,是

    public class LocalBinder<S> extends Binder {
private String TAG = "LocalBinder";
private  WeakReference<S> mService;


public LocalBinder(S service){
    mService = new WeakReference<S>(service);
}


public S getService() {
    return mService.get();
}

}

服务看起来像这样

     public class Curve extends Service
{
    private IBinder mBinder = new LocalBinder<Curve>(this);

    @Override
    public void onCreate() {
        super.onCreate();
        String balls = "balls";
        Toast.makeText(this, "Curve Service created...", Toast.LENGTH_LONG).show();
    }


    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return mBinder;//
    }
    @Override
    public void onStart(Intent intent, int startId) {
         String balls = "balls";
            Toast.makeText(this, "Curve Service created...", Toast.LENGTH_LONG).show();

    }
    @Override
    public void onDestroy() {

       mBinder = null;
    }

这真的没那么难,我希望有人能看出我哪里出错了。

编辑我为这篇文章取了一个坏名字。绑定返回 true,但在离开活动的 onCreate() 后立即崩溃。错误文本在上面的介绍中。

【问题讨论】:

    标签: android binding service android-intent data-transfer


    【解决方案1】:

    很多代码看起来很槽,但我有一个假设:

    尝试删除它:

    CuIntent.setAction(".Core.CURVE_SERVICE");
    

    还有来自这里的意图过滤器:

    <service android:name=".Core.Curve">
    <intent-filter>
        <action android:name=".Core.CURVE_SERVICE"></action>
    </intent-filter>
    </service>
    

    【讨论】:

    • 嗨,Knickedi,感谢您的建议,但杜尔加的回答也是如此,我已经尝试过这个:(
    • 哎呀按下了按钮。我已经尝试了很多东西,但似乎我的服务没有启动 CurveService 为 null 并且从未输入 Curve 类,因为我到处都有停止点。
    • 又是错误的按钮,如果我使用如下所示的 xml 代码,绑定返回 true,但 CurveService 仍然为空,并且我的广播接收器抛出空指针
    • 您可以编辑您的问题和您的 cmets。请不要滥用评论部分作为聊天(这真的很混乱)。因此,正如您所说,绑定现在可以工作了...
    • 对不起,我更新了上面的xml代码,删除了一些cmets。 Bind 确实有效,但随后会引发错误 ActivityThread.handleCreateService(ActivityThread$CreateServiceData) line: 2943 Service is null 并且它没有完成构建 – user960914
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多