2014-01-14 35 views
0

我有一個BroadcastReceiver,並在其OnReceive我應該調用MainActivity中定義的方法。無論我在哪裏搜索,我發現我將不得不編寫下面的代碼。StartActivity在Broadcastreciever打開應用程序,每次調用

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這樣,公衆覆蓋無效

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

這種情況下就要爲restrictedaccess。所以不能叫SyncCalendar方法

+0

如果您需要在您的應用程序中在後臺執行某些操作,而不顯示活動,請使用服務。 – njzk2

回答

0

取決於你是否需要或不執行該代碼所有的時間您的應用程序的生命,我建議:

  • AsyncThread:這是somelike的改進版本的Thread,因爲它已經實現了您需要用Thread手動設置的一些機制,但不建議您執行所有應用程序生命,僅用於結束進程。您可能會發現更多的信息there

  • 服務:否則,如果你的函數旨在運行所有應用的使用壽命長,服務是正確的選擇。這比AsyncThread更難理解,因爲它是一個類,直到你平滑地停止它到主UI,它纔會被執行,但它不是一個線程。您可能會發現this有用,還有this

+0

我已經創建了一個獲取數據的服務,但在接收數據之後,我必須調用MainActivity中的方法來更新日曆。我目前做的OnRecieve這樣,公衆覆蓋無效 '的onReceive(上下文語境,Android.Content.Intent意圖) { 如果(context.GetType()。等於(typeof運算(MainActivity))){ ( (MainActivity)上下文).SyncCalendar(); }}' 這個上下文是作爲restrictedaccess來的。因此無法調用SyncCalendar方法 – Ramya

+0

只需在您的MainActivity中添加另一個BroadcastReceiver並執行相同的過程。這對他們來說是好事,你可以把他們放在你需要的時間。 – nKn

+0

我不明白。你可以添加一個示例代碼嗎?我現在堅持了幾個小時 – Ramya

相關問題