我搜索了很多,我尝试了几种方法,但我找不到任何可以避免我的错误的方法。
我正在为我的学习开发应用程序,我的 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 吗?
希望我很清楚。