Android:将变量传递给已经运行的服务
Posted
技术标签:
【中文标题】Android:将变量传递给已经运行的服务【英文标题】:Android: Passing variables to an already running service 【发布时间】:2013-02-27 02:31:48 【问题描述】:我在将值从 Activity 传递到已运行的服务时遇到问题。我想知道最好的方法是什么?添加额外内容将不起作用,因为我认为这必须在意图开始之前完成? (如果我错了纠正我)。
任何帮助都会很棒!如果需要,我可以详细说明。
丹。
【问题讨论】:
【参考方案1】:如果您的服务不是IntentService
,您可以多次调用startService(...)
。该服务将第一次运行,但下一次调用将导致新的 onStartCommand()
调用以及您需要的新附加功能。
检查this answer 和doc。
【讨论】:
同意,这里有来自Activity#startService()
文档的更多证据。
啊,我明白了。不知道我是如何错过阅读文档的。感谢您的快速答复!
另见this answer,它解释了如何在onStartCommand()
期间调用startService()
来传递新的Intent 并在您的服务中读取它们。基本上与此处的答案相同,但更冗长。【参考方案2】:
将意图额外传递给服务 从活动开始这个意图 如果服务正在运行,请从活动中尝试此操作并使用 putExtra 传递参数。
Intent rc = new Intent(getApplicationContext(), myService.class);
rc.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //important for android 10
rc.putExtra("parama","ciao");
rc.putExtra("paramb","hello");
startService(rc);
记住,新线程,退出到主线程。
new Thread()
@Override
public void run()
super.run();
//start service..
您的服务
public class myService extends Service
@Override
public int onStartCommand(Intent intent, int flags, int startId)
if (intent.hasExtra("parama"))
Bundle b=new Bundle();
b=intent.getExtras();
String par_a=b.getString("parama");
if (intent.hasExtra("paramb"))
Bundle b=new Bundle();
b=intent.getExtras();
String par_b =b.getString("paramb");
【讨论】:
以上是关于Android:将变量传递给已经运行的服务的主要内容,如果未能解决你的问题,请参考以下文章