gpt4 book ai didi

android - 被 Android 服务搞糊涂了

转载 作者:行者123 更新时间:2023-11-30 04:42:21 25 4
gpt4 key购买 nike

我已经通读了有关服务的文档,但对于如何使用/编写服务,我仍然完全感到困惑。

我想要完成的事情:我的主要 Activity : 用户选择计时器的所有选项,然后单击一个按钮以通过单击启动计时器(在服务中)。我正在尝试使用 putExtra 将选项传递给服务。

服务会将变量收集到新变量中以供服务使用。

我有一个 onCreate 部分调用我在服务内部声明的公共(public)计数器,但不在 onCreate 部分中。我还声明了所有需要从此处的 Activity 传递的选项中枚举的变量。

我是否需要绑定(bind)到服务才能真正使用 putExtra 传递变量?

我有一个 onStart,这是我尝试通过执行一系列获取来枚举变量值的地方。这是由 Activity 中前面提到的按钮触发的。 Activity 内部 - 例如:

mSet.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//if toggled on
if (mEnableDisable.isChecked()){
getCurrentTime();
//start passing our variables to the service
Intent passvars = new Intent(getBaseContext(),TimerService.class);
passvars.putExtra("mHour24", mHour24);
//start the service now
startService(new Intent(TimerService.class.getName()));
}
}
});

服务内部 - 例如:

public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//Collecting data from Activity for calcs
Bundle getvars = intent.getExtras();
mHour24 = getvars.getInt("mHour24");
//start the counter now that I have my values
countDown.start();

此外,如果我可以在不崩溃的情况下启动服务,我需要将一个值传回 Activity 。所以我想我正在使用服务中的 putExtra 和 Activity 中的 getExtra 来做到这一点。再一次,我是否需要绑定(bind)到服务以获取新值?

如果我需要绑定(bind),我会在按下按钮时执行此操作。如果程序退出,我还会在主要 Activity 中添加一个部分,但随后会继续重新绑定(bind)并收集该值。我试图提取的值是计数器剩余的时间。因此,在柜台服务内部,我会有一个 onTick 将剩余时间放入一个变量中,并对该变量执行 putExtra,在 Activity 中我想收集该值并将其显示在 UI 中。

这是我的第一次服务尝试,我只是不确定如何正确创建和使用。在此先感谢您提供的所有帮助,对于如此冗长的文章,我们深表歉意。

更新:所以我现在可以使用该服务。我只是无法将信息从服务返回到主要 Activity 。

我添加了一个函数来尝试从单击按钮启动服务后启动的服务中检索数据:

startService(passvars);
//Init. variable for getDisplayInf() function to update the display with counter strings
Running = 1;
getDisplayInf();

和 getDisplayInf() 例如:

public void getDisplayInf() {
//Intent stIntent = new Intent(MainActivity.this,MainActivity.class);
//Intent passvars = new Intent(MainActivity.this,Service.class);
Bundle getvars = getIntent().getExtras();
String Remaining;
String CountDown;
do {
Remaining = getvars.getString("Remaining");
CountDown = getvars.getString("CountDown");
mRemaining.setText(Remaining);
mCountDown.setText(CountDown);
Running = getvars.getInt("Running");
}
while (Running == 1);
};

计时器将在完成时将 Running 变量设置为 0。一旦我点击带有此新功能的按钮,应用就会崩溃。

在服务中,我在柜台的 onTick 上执行此操作:

            @Override
public void onTick(long millisUntilFinished) {
Running = 1;
Remaining = "Time Remaining: ";
CountDown = formatTime(millisUntilFinished);
ticker();
}

代码:

public void ticker () {
Intent passvars = new Intent(Service.this,MainActivity.class);
//this is for the activity to keep looping to grab the countdown values while running this timer

//now send it to the activity
passvars.putExtra("Running", Running);
//String Values to be passed to the activity

//now send it to the activity
passvars.putExtra("mRemaining", Remaining);


//now send it to the activity
passvars.putExtra("mCountDown", CountDown);
};

最佳答案

尝试使用 passvars Intent 启动您的服务,而不是创建新的第二个 Intent:

Intent passvars = new Intent(MainActivity.this,TimerService.class);
passvars.putExtra("mHour24", mHour24);
//start the service now
startService(passvars);

关于android - 被 Android 服务搞糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com