2013-07-15 115 views
2

我搜索了很多,我嘗試了幾種方法,但我找不到任何可以避免我的錯誤的方法。getExtra崩潰應用程序在服務

我正在爲我的學習開發應用程序,其中是我的MainActivity中的字符串,然後在我的服務中調用它。我想是這樣的:

接下來的這個人去在我myService.class

//在我myService.class延伸服務

public class myService extends Service{ 

AlarmManager manager; 
PendingIntent pintent; 
String te; 


@Override 
public void onCreate() 
{ 
    manager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); 
    pintent = PendingIntent.getBroadcast(this, 0, new Intent("blahblah"), 0);} 

@Override 
public int onStartCommand(Intent intent, int flags, int startid) 
{ 

    super.onStartCommand(intent, flags, startid); 
      te = intent.getStringExtra("tst"); //if I change this line to te = "something", everything goes fine 
    BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       Toast.makeText(getApplicationContext(),te, Toast.LENGTH_SHORT).show(); 
      } 
    }; 
      this.registerReceiver(receiver, new IntentFilter("blahblah")); 

      // set alarm to fire 30 min and waits 2 min 
       manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1000*30*60, 1000*2*60, pintent); 
    return START_STICKY;} 

public IBinder onBind(Intent p1) 
{ 
    // TODO: Implement this method 
    return null; 
} 

}

這裏的代碼運行完美,但是當我退出我的應用程序時,它崩潰了。 1分鐘後,我的設備再次顯示我的應用程序崩潰,確認我的應用程序「成功」後臺運行。它有什麼問題? 我也學會了我可以使用IntentService而不是Service,對於長期任務來說更好,它們之間有什麼區別?

編輯***

我收到以下錯誤:java.lang.NullPointerExeption。 所以我改變這個:

te = intent.getStringExtra(「tst」);

向該:

嘗試 { TE = intent.getStringExtra( 「TST」); } 趕上(NullPointerException異常E) {}

當我改成了我的應用程序適用於任何的錯誤,但問題是:我需要從我的MainActivity找回我的字符串,當我關閉我的應用我的服務運行沒有錯誤,但我的「te」字符串採用null valor,我可以做些什麼來「保存」我的服務中的字符串,以便能夠使用它並在關閉我的應用程序後繼續顯示「正在工作」消息?我應該使用SharedPreferences嗎?

希望我很清楚。

+0

請發佈崩潰日誌。 – Steelight

+0

我沒有任何日誌,明天我可以使用Eclipse來查看它,現在我正在使用AIDE(一個直接在我的設備中工作的IDE),所以我編譯它並運行它。一旦應用程序安裝,我按下按鈕,AlarmManager按預期工作,但是當我退出我的應用程序時出現一條消息:MyApp已停止 –

+0

@ Steelight我更新了我的問題,查看我的編輯。謝謝。 –

回答

1

IntentService不同於Service

IntentService當服務完成任務時自殺。而服務永遠運行,除非你殺了它。

對於我的編碼體驗,我只將IntentService用於運行幾秒鐘的小任務,並使用Service來長時間運行並根據需要調用StopSelf()

請發佈日誌以回答您的問題

+0

請再次查看問題,我編輯了它。謝謝。 –

+1

這裏'intent'爲空。如果android操作系統啓動服務,我會爲null。有關更多信息,請查看http:// stackoverflow。com/questions/8421430 /原因,即通過意圖,將在null on-on-start命令 –

+1

這解決了我的問題,我唯一需要的是將返回值更改爲START_REDELIVER_INTENT。非常感謝您的幫助。 –