【发布时间】:2017-12-28 05:05:26
【问题描述】:
我已经搜索了一段时间,但找不到任何信息来调用 final() 使用启动的服务......或者更确切地说,当不使用绑定服务时。绑定服务有大量信息,但我已经有两个相当大的“已启动服务”没有绑定,所以我不想修改现有服务而不是绝对必要的。
我的应用通过每 10 秒读取一次蓝牙数据来工作,并且根据读取的数据,服务将更改为新的活动。但是,我无法从我的服务中调用 final(),所以我担心在应用程序/服务运行时我可能会无休止地堆叠活动。
要更改活动,我必须添加 Intent.FLAG_ACTIVITY_NEW_TASK。考虑到开发人员页面中的以下图像/定义,这个标志看起来可能已经处理了我的堆叠问题?我不允许用户使用手机上的后退按钮,因为一切都是通过确认/取消按钮和服务处理的。我的应用程序必须是这种方式有几个原因。因此,保持堆栈顺序对我的应用程序并不重要。
关键点 -
- 我想确保在开始新活动时不会无休止地堆积活动
- 通过我的服务启动活动时标记“新任务”
- 堆栈顺序对我的应用并不重要
下面是我使用 cmets 的一小段代码,用于解释我想要做什么。请务必查看此服务的 onDestroy() 方法。
public class AlertService extends Service {
final class Threader implements Runnable{
// Scans bluetooth advertisement packets every 10 seconds
// Thread Runs until interrupted
// Stops service via service ID
stopSelf(this.serviceID);
}
@Override
public void onCreate(){
super.onCreate();
}
// Runs a thread until alert is found.
// Alert calls thread.interrupt()
@Override
public int onStartCommand(Intent intent, int flags, int startID){
enableBluetooth();
// Start Thread
thread = new Thread(new Threader(startID));
thread.start();
return START_STICKY;
}
@Override
public void onDestroy(){
thread.interrupt();
Intent alertActivity = new Intent(this, AlertActivity.class)
alertActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(alertActivity);
}
// Unused Method - We will not be binding
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
EDIT 通过推荐使用 android:taskAffinity - 在这种情况下,使用 android:taskAffinity 对我没有帮助。默认情况下,应用程序中的所有活动都具有相同的亲和性。当我通过在意图标志中设置 Intent.FLAG_ACTIVITY_NEW_TASK 来创建新任务时,如果该活动与任务中的根活动具有相同的 taskAffinity,则新活动仍将在同一任务中启动。由于我只是使用默认的亲和力,所以一切都应该有正常的堆栈流。我就是不能调用finish(),这意味着我正在堆积大量的活动。
【问题讨论】:
-
您是否总是希望后堆栈上只有一个 AlertActivity?
-
@Sunhee 该应用程序以“家庭服务”运行开始。当发现警报时,Home Service 将停止并创建新活动,同时启动“Alert Service”。但是,警报服务期间可能会创建许多活动。通常,警报屏幕会发出警报,但会创建一个新活动以提供定期更新。稍后,一条“all clear”消息通过,结束警报服务并重新启动家庭服务和家庭活动。
-
如果你只想启动一个 AlertActivity,你必须在 Manifest.xml 中设置 android:taskAffinity 和 android:excludeFromRecents 为 AlertActivity。 但是,请告诉我你的来源,Home Service 停止后创建的活动来源和 AlertActivity 来源?
-
只是为了确定,你想在home服务停止后启动下一个activity的来源,以及alert服务的来源?我可以以某种方式将这些信息发给您吗,这是与工作有关的。
-
是的,我想在 home 服务和 AlertActivity 源之后检查活动源。 PM是什么意思?
标签: java android android-studio android-activity service