2

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

我正在为我的学习开发应用程序,我的 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”字符串为空值,我能做什么在我的服务中“保存”我的字符串,以便在我关闭我的应用程序后能够使用它并继续显示“工作”消息?我应该使用 SharedPreferences 吗?

希望我很清楚。

4

1 回答 1

1

IntentService不同于Service.

IntentService Self 在完成任务时终止服务。而服务永远运行,除非你杀死它。

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

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

于 2013-07-15T08:44:01.903 回答