如何从注销按钮停止服务?
Posted
技术标签:
【中文标题】如何从注销按钮停止服务?【英文标题】:How to stop service from logout button? 【发布时间】:2017-02-23 12:52:17 【问题描述】:您好,我正在构建一个应用程序,我在其中使用位置服务。该服务必须一直工作,所以我设置当服务进入 onDestroy 时,意图被发送到再次启动服务的 BroadcastReceiver,这样,我的服务总是工作。但是当用户单击按钮注销时,我想停止服务。如何防止这种情况,当服务进入 onDestroy 时,不要发送意图广播(但仅当用户单击注销时)? 这是我从 MainActivity 的注销:
@Override
public boolean onOptionsItemSelected(MenuItem item)
int id = item.getItemId();
if (id == R.id.action_log_out)
if (isNetworkConnected())
unsubscribingFromFirebase();
removeTokenAndAccountFromSharedPreferences();
stopService(mServiceIntent);
Log.i("MAIN_ACTIVITY", "Logout!");
Log.d("MAIN_ACTIVITY " , "Internet access ");
else
Toast.makeText(getApplicationContext(), getResources().getString(R.string.need_internet), Toast.LENGTH_SHORT).show();
这些是定位服务中的 onStartCommand、onCreate 和 onDestroy 方法:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
Log.d("onStartCommand" , "LocationService");
return START_STICKY;
@Override
public void onCreate()
super.onCreate();
isEnded = false;
mRequestingLocationUpdates = false;
mLastUpdateTime = "";
Bugsnag.init(this, BUGSNAG_API_KEY);
buildGoogleApiClient();
Log.d("onCreateService", "onCreateService");
@Override
public void onDestroy()
super.onDestroy();
Log.i("EXIT", "onDestroy!");
timeWhenServiceDestroyed = DateFormat.getTimeInstance().format(new Date());
SharedPreferences sharedPreferences = getSharedPreferences(getResources().getString(R.string.user_location), MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("onDestroyService", timeWhenServiceDestroyed);
editor.apply();
stopLocationUpdates();
Log.d("onDestroyService", "onDestroy: + " + timeWhenServiceDestroyed);
Intent broadcastIntent = new Intent("uk.ac.shef.oak.ActivityRecognition.RestartSensor");
sendBroadcast(broadcastIntent);
这是我的广播接收器:
@Override
public void onReceive(Context context, Intent intent)
Log.i(LocationServiceRestartBroadcastReceiver.class.getSimpleName(), "Service Stops! Oooooooooooooppppssssss!!!!");
context.startService(new Intent(context, LocationService.class));
如何防止当用户单击注销按钮时,我的服务不再创建?提前致谢。
【问题讨论】:
【参考方案1】:您可以使用静态布尔变量 shouldRestart
即 false
仅当单击注销按钮时,否则 true
。
添加到您的活动中:
public static boolean shouldRestart=true
;
将这一行添加到“注销按钮单击事件”中:
shouldRestart=false
;
并在onDestroy
服务方法中添加此行:
if (MainActivity.shouldRestart)
Intent broadcastIntent = new Intent("uk.ac.shef.oak.ActivityRecognition.RestartSensor");
sendBroadcast(broadcastIntent);
MainActivity.shouldRestart=true;
【讨论】:
以上是关于如何从注销按钮停止服务?的主要内容,如果未能解决你的问题,请参考以下文章