2013-07-15 77 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。非常感谢您的帮助。 –