Я прошу прощения в программировании, но я здесь, чтобы попросить совета. Я делаю приложение, которое предоставляет вам системные данные, такие как загрузка процессора, оперативная память и т. Д. У меня есть все, что мне нужно, и это работает! Но есть проблема, когда я нажимаю кнопку, которая запускает новую активность, в которой я могу видеть информацию о системе, также в этом действии я запускаю метод getSystemInfo() в методе onCreate(), который получает всю необходимую мне информацию, и это требуется некоторое время, пока это не будет сделано, что означает черный экран, и пользователь должен подождать ..Выполнение метода в цикле через AsyncTask - Android?
Я хотел бы начать и загрузить активность перед выполнением метода getSystemInfo(), который должен выполняться в фоновом режиме в цикле до нажата кнопка goBack пользователя.
Я видел это: How to use AsyncTask correctly in Android, но мне все еще слишком сложно.
Любая помощь будет оценена. Спасибо, миллион раз!
Мой код здесь:
public class SystemInfoActivity extends Activity{
TextView outCPU;
TextView outMEM;
TextView outTASKS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_systeminfo);
Log.d("MSG:", "running");
outCPU = (TextView) findViewById(R.id.outCPU);
outMEM = (TextView) findViewById(R.id.outMEM);
outTASKS = (TextView) findViewById(R.id.outTASKS);
getSystemInfo();
}
protected void getSystemInfo() {
//**********CPU********
RunCommandTOP top = new RunCommandTOP();
int[] cpuUsage = top.CommandTOP();
int user = cpuUsage[0];
int system = cpuUsage[1];
int total = (system + user);
outCPU.setText("CPU usage: " + user + "% user, " + system + "% system, " + total + "% total");
//**********RAM********
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
long availibleMB = memoryInfo.availMem/1048576L;
long totalMB = memoryInfo.totalMem/1048576L;
long usedMB = totalMB - availibleMB;
outMEM.setText("RAM usage: " + usedMB + "/" + totalMB + "MB");
//**********TASKS********
RunCommandPS ps = new RunCommandPS();
String commandLines = ps.CommandPS();
int NumberLines = countTasks(commandLines);
int Tasks = NumberLines - 1;
outTASKS.setText("Tasks: " + Tasks);
}
private static int countTasks(String str) {
String[] lines = str.split("\r\n|\r|\n");
return lines.length;
}
public void onBackPressed() {
Log.i("MSG", "Going back");
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
//return true;
}
}
какие вопросы вы с помощью AsyncTask? Это более простой способ обработки асинхронных задач, поскольку вы можете использовать сервисы, но, на мой взгляд, это немного сложнее. –
5 минут вам нужно это понять http://developer.android.com/reference/android/os/AsyncTask.html –