MainActivity 및 PreferencesActivity가 있습니다. PreferencesActivity는 사용자가 "프록시 사용"설정을 전환 할 수있게합니다. PreferencesActivity에서 MainActivity로 돌아 왔을 때, 새로운 설정이 즉시 작동되기를 원하지만, 응용 프로그램을 닫고 다시 열면 작동합니다. 내가 MainActivity에 환경 활동에서 돌아 오는 것입니다 경우App Proxy 설정을 PreferenceActivity에서 실시간으로 변경하십시오.
나는 이론적으로 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();
}
에서이 방법을 사용하여 프록시 설정을 설정 작동해야하는 다음 코드를 사용하여
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 변경 작업을 강제로 수행하고 응용 프로그램을 자동으로 다시 시작하는 올바른 방법입니다.
당신은 또한 게시 할 수있는
flags
없이 의도를 시작 PreferenceActivity를 프록시의 값을 받고 MainActivity의 일부? 'coz 응용 프로그램을 다시 시작하거나 닫을 때 preferenceActivity 값을 가져 오거나 가져올 필요가 없습니다. – Jerrol@Jerrol 예, 여기를 보시기 바랍니다.이 질문을 펼치지 않기 위해 일부 코드를 Google 문서에 넣었습니다. https://docs.google.com/document/d/1OYrJPNP0EynyUvpJKm1124F5E2mKdVer-wG8v7qCxLA/edit?usp=sharing 그리고 비디오를 캡쳐했습니다 (비디오에서는 3:33에 한 번만 디버그 모드로 작동했습니다) - https : // youtu./ QLRa2yHtDWQ 조금 설명해 드리겠습니다. "프록시 사용"확인란을 선택하지 않으면 프록시가없는 데이터가로드되어서는 안됩니다. 그렇지 않으면 모든 것이 문제없이 작동합니다. –