2016-05-30 64 views
0

我想寫一個服務,將檢查每個午夜從服務器的新數據,並將下載它。Pending Intent使主要活動重新加載,爲什麼?

但是,當我啓動應用程序mainActivity屏幕後幾秒鐘重新加載。 我爲此付出了代價, 爲什麼會發生這種情況?

她是文件:

MainActivity:我心中已經創建了一個AlarmManager對象設置的PendingIntent:

//Set alarm 
    /* Retrieve a PendingIntent that will perform a broadcast */ 
    Intent alarmIntent = new Intent(getApplicationContext(), AlarmReciever.class); 
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0); 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    int interval = 1000 * 24 * 60 * 60; 

    /* Set the alarm to start at 10:30 AM */ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 00); 
    calendar.set(Calendar.MINUTE, 00); 
    manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 

AlarmReciever:

public class AlarmReciever extends BroadcastReceiver { 
    private Data newData = null; 
    public SharedPreferences settings; 
    ConnectivityManager cm = null; 
    NetworkInfo netInfo = null; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     newData = new Data(context); 

     // TODO Auto-generated method stub 
     newData.cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     newData.netInfo = newData.cm.getActiveNetworkInfo(); 
     newData.settings = PreferenceManager.getDefaultSharedPreferences(context); 
//  System.out.print("-----------------" + newData.netInfo); 
     newData.checkOnline(); 
    } 
} 

Data.java :

public void checkOnline(){ 
    if (isOnline()){ 
     System.out.print("**************** YES Internet"); 
     firstAsyncTask task = new firstAsyncTask(this); 
     try { 
      Object dobj = task.execute("par1", "par 2", "par 3").get(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 

    }else{ 
     System.out.print("**************** NO Internet"); 
    } 
} 

的data.java文件是大這裏發佈,但似乎在使應用程序重新加載在MainActivity頁面中的「checkOnline」的方法,我應該送不同的服務?

感謝Thanx &回答。

回答

0

您似乎有誤

pendingIntent = PendingIntent.getService(getApplicationContext(), 0, alarmIntent, 0);

寫這條線應該是這樣的

pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0);

由於您使用BroadcastReciever。

+0

對不起,我修好了,它仍然在發生 – Eli

+0

根據你的代碼,不知道爲什麼會發生這種情況 –

0

導致以下線路網絡訪問?

Object dobj = task.execute("par1", "par 2", "par 3").get(); 

如果是這樣,那麼系統可能會殺了你的進程(醚對主線程或事件循環超時亦稱ANR聯網)。如果它的服務最終重新啓動它。

0

在你Activity你這樣做:

manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 

這會導致立即觸發BroadcastReceiver,因爲你已經指定System.currentTimeMillis()作爲觸發第一次的時間。

您可能的意思是使用calendar.getTimeInMillis()作爲第一次觸發報警。但即使您將其更改爲,它仍會立即觸發,因爲您已將日曆中的時間設置爲當日的00:00,該時間已過!您需要使用calendar.getTimeInMillis() + interval(在之後的的00:00,或者在使用calendar.getTimeInMillis()之前,您可以在日曆中添加1天。

相關問題