【发布时间】:2015-11-19 16:20:45
【问题描述】:
我有一个活动,只有在我多次按下硬件的后退按钮(或多或少 2 次)后才会关闭。
我已尝试检测何时发生这种情况,我认为这一定是由于我正在使用的 IntentService 使用广播接收器接收一些信息,但我不太确定,因为没有显示错误消息或警告.
有没有更多经验的人知道这通常意味着我必须在活动中按多次后退按钮才能关闭它?
我什至尝试覆盖 onBackPressed() 但它不起作用:
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
更新
所以我插入了一些控制台日志 onCreate() 和 onDestroy() 活动,所以似乎一旦在活动中,当我按下返回按钮时,活动似乎再次被创建(再次调用活动的 onCreate())然后 onDestroy叫做。
更新 2
这是我认为可能引发问题的方法:
private void startRestaurantsModelService(String url) {
if(restaurantsBroadcastReceiver == null){
//Intent to use RestaurantModel to getRestaurantsJsonArrays
Intent getRestaurants = new Intent(HomeActivity.this, RestaurantModel.class);
getRestaurants.putExtra("urlRestaurants", url);
startService(getRestaurants);
//The receiver that will receive restaurants list from RestaurantModel IntentService
restaurantsBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle restaurantsBundle = intent.getExtras();
//Assign Restaurants received from service
restaurants = (List<Restaurant>) restaurantsBundle.getSerializable("restaurantsList");
//Now that we have restaurants list configure the RecyclerView
recyclerViewConfiguration();
//We need to know number of open restaurants so we can use different layout settings
//for closed restaurants in adapter using getItemViewType()
numberOfOpenRestaurants = restaurantsBundle.getInt("numberOfOpenRestaurants");
restaurantAdapter.setNumberOfOpenRestaurants(numberOfOpenRestaurants);
//Then update the RecyclerView
updateRecyclerView();
if (loadingDialog.isShowing()) {
loadingDialog.dismiss();
}
}
};
registerReceiver(restaurantsBroadcastReceiver, new IntentFilter(RestaurantModel.BROADCAST_ACTION));
}
}
我正在 onPause 中取消注册该广播:
@Override
protected void onPause() {
super.onPause();
try {
unregisterReceiver(restaurantsBroadcastReceiver);
restaurantsBroadcastReceiver = null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
回栈中有分片交易吗?
-
这通常意味着你要么在片段后栈上有东西,要么你有几个活动,可能相同,堆叠在一起
标签: android android-activity android-service android-broadcast android-intentservice