getExtra在服务中崩溃应用程序

时间:2013-07-15 08:37:53

标签: java android service

我搜索了很多,我尝试了几种方法,但是找不到任何可以避免错误的方法。

我正在为我的学习工作,在我的MainActivity中有一个字符串,然后我在我的服务中调用它。我试过这样的事情:

下一个进入myService.class

//在我的myService.class中扩展Service

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,哪一个对于长任务更好,它们之间有什么区别?

EDIT ***

我收到以下错误:java.lang.NullPointerExeption。 所以我改变了这个:

te = intent.getStringExtra(“tst”);

对此:

试         {             te = intent.getStringExtra(“tst”);         }         catch(NullPointerException e)         {}

当我更改它时,我的应用程序可以处理任何错误,但问题是:我需要从我的MainActivity中检索我的String,当我关闭我的应用程序时,我的服务运行没有错误但我的“te”字符串采用null valor,什么我可以在我的服务中“保存”我的字符串,以便能够使用它并在关闭我的应用程序后继续显示“工作”消息吗?我应该使用SharedPreferences吗?

希望我很清楚。

1 个答案:

答案 0 :(得分:1)

IntentServiceService不同。

IntentService Self在完成任务时终止服务。除非你杀了它,否则服务会永远运行。

对于我的编码经验,我会将IntentService仅用于运行几秒钟的小任务,并使用Service进行长时间运行,并根据需要调用StopSelf()

请发布日志以回答您的问题