onRestart() 和 onRefresh() 行为不同,代码相同

onRestart() and onRefresh() Act Different with Same Code

我在 onRefresh() 和 onRestart() 中有完全相同的方法和调用,但出于某种原因,onRestart() 完全按照我的要求执行,但 onRefresh() 的行为不同。我想要发生的是让应用程序了解何时在 运行 时禁用该位置。

onRestart() 这样做:我启动应用程序,获取预测数据,禁用状态栏中的位置,按下主页按钮并再次打开应用程序。正如预期的那样,onRestart() 尝试检查 GPS 状态(使用 gpsTracker.getIsGPSEnabled()),发现位置被禁用,并发送相应的 Toast 消息。

onRefresh() 这样做:我启动应用程序,获取预测数据,禁用状态栏中的位置,甚至等待几秒钟然后刷新应用程序。出乎意料的是,onRefresh() 给出了发送 "Data Refreshed" toast,即使它获得 "null, null" 作为位置纬度和经度。

我也可以提供其他代码,但如果其余代码有问题,为什么 onRestart() 会按照我想要的方式运行?我没有收到任何错误。任何帮助将不胜感激。谢谢

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    final GPSTracker gpsTracker = new GPSTracker(this);


    mSwipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mSwipeRefreshLayout.setRefreshing(false);
                    if (gpsTracker.getIsGPSTrackingEnabled()) {
                        gpsTracker.getLocation();
                        getForecast(gpsTracker);
                        Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
                    }
                }
            }, 3000);
        }
    });
}

@Override
protected void onRestart() {
    super.onRestart();
    final GPSTracker gpsTracker = new GPSTracker(this);
    new Handler().postDelayed (new Runnable ()
       @Override public void run() {
            gpsTracker.getLocation();
            if (gpsTracker.getIsGPSTrackingEnabled()) {
                getForecast(gpsTracker);
                Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
            }
        }
}, 3000);
}

onRestart 你创建一个新的 GPSTracker 实例。尝试在 onRefresh 中更新您的 GPSTracker 处理程序。 试一试

            @Override
            public void onRefresh() {
            final GPSTracker gpsTracker = new GPSTracker(MainActivity.this);
            new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mSwipeRefreshLayout.setRefreshing(false);
                if (gpsTracker.getIsGPSTrackingEnabled()) {
                    gpsTracker.getLocation();
                    getForecast(gpsTracker);
                    Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
                }
            }
        }, 3000);
    }
});