我正在构建一个游戏,我希望用户在20秒内完成许多活动。一旦20秒结束,我想将用户发送到GameOver屏幕。为了在后台运行计时器,我使用了一项服务。问题是,服务似乎没有运行?
奇怪的是,即使吐司也没有显示出来。这是我称之为服务的地方:
这是清单:
请告知我服务或计时器为何没有运行的原因。非常感谢你的帮助,我真的很感激!如果您需要更多代码,请告诉我,我会告诉您。谢谢!
: - )
{Rich}
答案 0 :(得分:1)
服务无法与用户界面进行互动,这就是Toast
所做的事情。如果您想这样做,请尝试使用runOnUIThread
和getApplicationContext
或使用绑定/回调的奇特方式。另外,看看AlarmManager
,可能是一个更简单的解决方案,而不是运行服务。
答案 1 :(得分:0)
BroadcastReciever
应该是获得和展示祝酒词的解决方案。只需从服务发送消息并在活动中捕获它。然后在任何地方使用它。
//Service class
final static String ACTION = "ACTION";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
intent = new Intent();
intent.setAction(ACTION);
intent.putExtra("StartToast", "Started!");
sendBroadcast(intent);
return START_STICKY;
}
//Activity class
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(MainActivity.this, ServiceClass.class);
myReceiver = new MyReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction(ServiceClass.ACTION);
registerReceiver(myReceiver, intentFilter);
}
private class MyReceiver extends BroadcastReceiver {
public String startToast;
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
startToast = arg1.getStringExtra("StartedToast");
Toast.makeText(MainActivity.this, startToast, Toast.LENGTH_SHORT).show();
}
注册此接收器后,当您使用intent.putExtra(....);
发送数据时,您会收到消息并自动创建一个祝酒词。