Broadcastreceiver中的Start Activity会在每次调用时打开应用程序

时间:2014-01-14 15:50:04

标签: android xamarin.android background-process

我有BroadcastReceiver,在其OnReceive上,我应该调用MainActivity中定义的方法。无论我在哪里搜索,我发现我必须编写以下代码。

Bundle bundle = intent.Extras;
Intent callingIntent = new Intent(context, typeof(MainActivity));
callingIntent.PutExtra("isSynched", true);
callingIntent.AddFlags(ActivityFlags.NewTask);
callingIntent.AddFlags(ActivityFlags.SingleTop);
context.StartActivity(callingIntent);

现在这会调用我的方法,但应用程序会一直打开。我不希望这种情况发生。我希望在应用程序处于后台并且希望应用程序处于后台时调用该方法。我该怎么办?我正在使用xamarin来编写代码。 我创建了一个获取数据的服务,但在收到数据后,我必须在MainActivity中调用一个方法来更新日历。我目前在OnRecieve中这样做,public override void

OnReceive(Context context, Android.Content.Intent intent) { if (context.GetType().Equals(typeof(MainActivity))) { ((MainActivity)context).SyncCalendar(); }}

这种背景即将成为受限制的。所以无法调用SyncCalendar方法

1 个答案:

答案 0 :(得分:0)

根据您是否需要在应用程序存在时执行该代码,我建议:

  • AsyncThread :这有点像Thread的改进版本,因为它已经实现了您需要使用Thread手动设置的一些机制,但不建议您执行所有应用程序生命周期,仅用于结束进程。您可以找到更多信息there

  • 服务:否则,如果您的功能旨在运行您的所有应用终身,那么服务是正确的选择。它比AsyncThread更难理解,因为它是一个它被执行的类,直到你将它并行地停止到你的主UI,但它不是一个线程。您可能会发现this有用,还有this