Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 需要活动和服务行为的建议_Android_Service_Android Activity - Fatal编程技术网

Android 需要活动和服务行为的建议

Android 需要活动和服务行为的建议,android,service,android-activity,Android,Service,Android Activity,我的问题相当理论化,事实上我已经看到了关于如何绑定或如何使用服务启动活动的示例,但我仍然没有得到一件事: 我编写了一个绑定到某个活动的服务,我想知道如何从该服务获取调用bindService()方法的活动。 我的目的是获取服务所需的对象,因为我希望它在后台侦听网络消息,因为此对象非常复杂,所以我宁愿获取包含它的活动。 是否可以调用当前上下文 感谢您的回答。如果您的服务仅在应用程序中使用,并且一次仅由一个进程使用,则可以尝试使用绑定服务。在IBinder中,用于在活动和服务之间进行通信的接口实现了

我的问题相当理论化,事实上我已经看到了关于如何绑定或如何使用服务启动活动的示例,但我仍然没有得到一件事: 我编写了一个绑定到某个活动的服务,我想知道如何从该服务获取调用bindService()方法的活动。

我的目的是获取服务所需的对象,因为我希望它在后台侦听网络消息,因为此对象非常复杂,所以我宁愿获取包含它的活动。
是否可以调用当前上下文


感谢您的回答。

如果您的服务仅在应用程序中使用,并且一次仅由一个进程使用,则可以尝试使用绑定服务。在
IBinder
中,用于在活动和服务之间进行通信的接口实现了一个返回本地服务的公共方法。将通过
onServiceConnected()
回调将此
IBinder
提供给活动。此时,活动可以获取
服务
对象,并调用它一个公共方法来传递所需的对象

public class MyService extends Service {

    private final IBinder mBinder = new MyBinder(); //singleton

    private MyObject mObject;

    public class MyBinder extends Binder {
        MyService getService() {
            return this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    public void setMyObject(MyObject mObject) {
      this.mObject = mObject;
    }
}

希望这对您有用。

这是一个非常简单和有用的答案,非常感谢,顺便问一下,您是否知道如何从服务中唤醒不在前台的活动?最好的方法是使用明确的意图,如startActivity(bundle,MyActivity.class)。start activity不是仅用于第一次运行活动吗?如果,承认用户运行了应用程序,然后回到家中,我希望我的服务能够监听套接字并捕获传入的消息,在应用程序是否在后台运行时显示它,使用它将是使其再次出现在前台的最佳方式?对不起,我第一次使用Androides中的服务,没有!默认情况下,新活动独立于前一个活动启动。但您可以通过两种方式覆盖此行为。在清单中的标记中使用launchmode属性。或者,您可以向意图添加一个标志。第一个是定义您的活动默认行为,您应该使用singleTask。第二个是定义你的活动行为以响应特定的意图,我认为FLAG_activity_NEW_TASK应该完成这项工作。查看此文件了解更多信息:developer.android.com/guide/components/tasks and back stack.html#managengtask运行良好谢谢,我使用了清单解决方案,将启动模式设置为singleTask,尽管我花了很多时间来完成整个过程。