我有MainActivity和PreferencesActivity。 PreferencesActivity允許用戶切換「使用代理」設置。當我從PreferencesActivity返回到MainActivity時,我希望我的新設置立即生效,但它們只在關閉並再次打開應用程序後纔有效。從PreferenceActivity實時更改App Proxy設置
我在MainActivity的onCreate
private void setProxy(String host, String port)
{
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port);
System.setProperty("https.proxyHost", host);
System.setProperty("https.proxyPort", port);
}
它看起來像這樣(簡化代碼)
if(preferences.getBoolean("use_proxy"))
{
setProxy(proxyHost, proxyPort);
}
else
{
resetProxy();
}
設置使用這種方法的代理設置從理論上講,如果我會回來的偏好活動到MainActivity使用下一個代碼它應該工作
Intent intent = new Intent(PreferencesActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
但事實並非如此。儘管MainActivity的onCreate
方法正在執行並設置代理,但在應用程序由用戶手動重新啓動之前,網絡無法通過代理工作。
最後我發現唯一的工作方式,但我不確定它是否正確。我用這個代碼,當我關閉PreferencesActivity,回來MainActivity
PackageManager packageManager = c.getPackageManager();// c - PreferencesActivity context
Intent intent = packageManager.getLaunchIntentForPackage(c.getPackageName());
ComponentName componentName = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(componentName);
c.startActivity(mainIntent);
System.exit(0);
這工作得很好,但據我所知,它是不推薦使用System.exit (0);
和使用finish
不會在這種情況下工作。
問題是什麼是正確的方式來強制工作的PreferenceActivity更改而不關閉應用程序的用戶,並自動重新啓動應用程序?
可以還張貼PreferenceActivity和MainActivity的地方越來越代理值的一部分? '放置並獲取preferenceActivity的值時,不必重新啓動或關閉應用程序。 – Jerrol
@Jerrol是的,請看這裏,我已經放在谷歌文件的一些代碼,以免擴大這個問題https://docs.google.com/document/d/1OYrJPNP0EynyUvpJKm1124F5E2mKdVer-wG8v7qCxLA/edit?usp=sharing 並且我還捕獲了我正在調試應用程序的視頻(在視頻上,它曾在3:33上工作過一次,但僅在調試模式下) - https:// youtu。be/QLRa2yHtDWQ 我會稍微解釋一下:如果沒有選中「使用代理」複選框,則不應該加載沒有代理的數據,否則一切都應該沒有任何問題 –