[英]Implement Thread Android in my class?
我想知道如何在此类中实现线程以使其免受ANR(应用程序无响应)问题的影响
public class myClass {
private static String LOG_TAG = Root.class.getName();
public boolean isDeviceRooted() throws IOException {
if (checkRootMethod1()){return true;}
if (checkRootMethod2()){return true;}
if (checkRootMethod3()){return true;}
return false;
}
public boolean checkRootMethod1(){
String buildTags = android.os.Build.TAGS;
if (buildTags != null && buildTags.contains("test-keys")) {
return true;
}
return false;
}
public boolean checkRootMethod2(){
try {
File file = new File("/system/app/Superuser.apk");
if (file.exists()) {
return true;
}
else {
return false;
}
} catch (Exception e) {
}
return false;
}
public boolean checkRootMethod3() {
if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){
return true;
}else{
return false;
}
}
}
例如,如果当我按下一个按钮时此代码被执行,如果我多次按下此按钮,则我的应用程序具有ANR。
您不想使用Thread
,而是要使用AsyncTask
。 这是如何做:
根据以下内容,确定您的应用程序需要什么: AsyncTask<TypeOfVarArgParams, ProgressValue, ResultValue>
一些启发:
public class MyClass {
//Something
public MyClass() {
new BackgroundTask().execute("Hello World");
}
}
private class BackgroundTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
// Prepare your background task. This will be executed before doInBackground
}
@Override
protected String doInBackground(String... params) {
// Your main code goes here
String iAmAString = "I have done something very heavy now...";
return iAmAString;
}
@Override
protected void onPostExecute(String result) {
// Whatever should happen after the background task has completed goes here
}
@Override
protected void onProgressUpdate(Void... values) {
// In here, you can send updates to you UI thread, for example if you're downloading a very large file.
}
}
Thread thread = new Thread()
{
@Override
public void run()
{
myClass rootChecker = new myClass();
isRooted = rootChecker.isDeviceRooted();
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.