Ваш код имеет вложенный фрагмент. Вызов super.onActivityForResult не работает
Вы не хотите изменять каждое действие, из которого может быть вызван ваш фрагмент, или сделать работу вокруг вызова каждого фрагмента в цепочке фрагментов.
Вот одно из многих рабочих решений. создать фрагмент «на лету» и связать его непосредственно с активностью с помощью менеджера фрагментов поддержки. Затем вызовите startActivityForResult из вновь созданного фрагмента.
private void get_UserEmail() {
if (view == null) {
return;
}
((TextView) view.findViewById(R.id.tvApplicationUserName))
.setText("Searching device for user accounts...");
final FragmentManager fragManager = getActivity().getSupportFragmentManager();
Fragment f = new Fragment() {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
new String[]{"com.google"}, false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
String mEmail = "";
if (resultCode == Activity.RESULT_OK) {
if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME)) {
mEmail = data
.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
}
}
if (mActivity != null) {
GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
}
doUser();
}
super.onActivityResult(requestCode, resultCode, data);
fragManager.beginTransaction().remove(this).commit();
}
};
FragmentTransaction fragmentTransaction = fragManager
.beginTransaction();
fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
fragmentTransaction.commit();
}
С PowerShell:
Get-Process | Sort-Object CPU -desc | Select-Object -first 3 | Format-Table CPU,ProcessName -hidetableheader
возвраты несколько как:
16.8641632 System
12.548072 csrss
11.9892168 powershell
Вы смогли использовать Pmon.exe для этого. Можно получить его как часть инструментов Windows Resource Kit (ссылка к версии Сервера 2003 года, которая может, по-видимому, использоваться в XP также).
Process.TotalProcessorTime
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.totalprocessortime.aspx
Что Вы хотите получить, это - мгновенное использование ЦП (отчасти)...
На самом деле мгновенное использование ЦП для процесса не делает существует. Вместо этого необходимо сделать два измерения и вычислить среднее использование ЦП, формула довольно проста:
AvgCpuUsed = [TotalCPUTime (процесс, time2) - TotalCPUTime (процесс, time1)] / [time2-time1]
Чем ниже Time2 и различие Time1, тем более "мгновенно" Ваше измерение будет. Windows Task Manager вычисляет использование ЦП с интервалом одной секунды. Я нашел, что это более чем достаточно, и Вы могли бы даже рассмотреть выполнение его через 5 секунд, интервалы вызывают действие измерения себя, поднимает циклы ЦП...
Так, во-первых, для получения среднего процессорного времени
using System.Diagnostics;
float GetAverageCPULoad(int procID, DateTme from, DateTime, to)
{
// For the current process
//Process proc = Process.GetCurrentProcess();
// Or for any other process given its id
Process proc = Process.GetProcessById(procID);
System.TimeSpan lifeInterval = (to - from);
// Get the CPU use
float CPULoad = (proc.TotalProcessorTime.TotalMilliseconds / lifeInterval.TotalMilliseconds) * 100;
// You need to take the number of present cores into account
return CPULoad / System.Environment.ProcessorCount;
}
теперь, для "мгновенной" загрузки ЦП Вам будет нужен специализированный класс:
class ProcLoad
{
// Last time you checked for a process
public Dictionary<int, DateTime> lastCheckedDict = new Dictionary<int, DateTime>();
public float GetCPULoad(int procID)
{
if (lastCheckedDict.ContainsKey(procID))
{
DateTime last = lastCheckedDict[procID];
lastCheckedDict[procID] = DateTime.Now;
return GetAverageCPULoad(procID, last, lastCheckedDict[procID]);
}
else
{
lastCheckedDict.Add(procID, DateTime.Now);
return 0;
}
}
}
Необходимо назвать тот класс от таймера (или безотносительно метода интервала, который Вы любите) для каждого процесса, который Вы хотите контролировать, если Вы хотите все процессы, просто используют Процесс. Статический метод GetProcesses