Java 如何在android中等待后台进程完成
我试图等待后台进程完成,然后在它完成后做一些相应的事情 基本上我有一个类Java 如何在android中等待后台进程完成,java,android,Java,Android,我试图等待后台进程完成,然后在它完成后做一些相应的事情 基本上我有一个类TwitterActivity和一个内部类CheckInternetConnection,它扩展了AsyncTask。我还有一个按钮mSignin,我为它设置了事件处理。此外,我还有一个布尔值hasInternet 我的目标是当按下mSignin按钮时,我将调用CheckInternetConnection。这将更新我的布尔值hasneet。因此,我希望做一些事情 但我想在onClick()方法内部执行 有没有办法实现这一目
TwitterActivity
和一个内部类CheckInternetConnection
,它扩展了AsyncTask
。我还有一个按钮mSignin
,我为它设置了事件处理。此外,我还有一个布尔值hasInternet
我的目标是当按下mSignin
按钮时,我将调用CheckInternetConnection
。这将更新我的布尔值hasneet
。因此,我希望做一些事情
但我想在onClick()方法内部执行
有没有办法实现这一目标?谢谢
public class TwitterActivity extends Activity
{
private boolean hasInternet = false;
private Button mSignin;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin = (Button)findViewById(R.id.login_id);
mSignin.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
new CheckInternetConnection().execute();
if(hasInternet)
//do some stuff
else
//do some other stuff
}
});
}
class CheckInternetConnection extends AsyncTask<Void, Void, Boolean>{
@Override
protected void onPostExecute(Boolean result){
if(result)
hasInternet = true;
else
hasInternet = false;
}
@Override
protected Boolean doInBackground(Void... params) {
return true;
}
}
}
公共类TwitterActivity扩展活动
{
私有布尔值=false;
专用按钮mSignin;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin=(按钮)findViewById(R.id.login\u id);
mSignin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
新建CheckInternetConnection().execute();
国际单项体育联合会(互联网)
//做点什么
其他的
//做些别的事情
}
});
}
类CheckInternetConnection扩展了异步任务{
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果)
hasInternet=正确;
其他的
hasInternet=错误;
}
@凌驾
受保护的布尔doInBackground(Void…params){
返回true;
}
}
}
异步任务的目的是处理不会阻塞主线程的昂贵过程。如果这是一个快速的步骤,不要将其作为一个单独的任务,只需立即执行即可。有多种方法可以等待异步任务完成,但我认为您不想这样做,因为它会阻塞UI线程。相反,将该检查移动到onPostExecute
。您还可以在单击按钮时检查连接
public class TwitterActivity extends Activity
{
private boolean hasInternet = false;
private Button mSignin;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin = (Button)findViewById(R.id.login_id);
mSignin.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
checkInternet();
}
});
}
private void checkInternet(){
if(hasInternet)
//do some stuff
else
new CheckInternetConnection().execute();
}
class CheckInternetConnection extends AsyncTask<Void, Void, Boolean>{
@Override
protected void onPostExecute(Boolean result){
if(result)
hasInternet = true;
else
hasInternet = false;
checkInternet();
}
@Override
protected Boolean doInBackground(Void... params) {
return true;
}
}
}
公共类TwitterActivity扩展活动
{
私有布尔值=false;
专用按钮mSignin;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin=(按钮)findViewById(R.id.login\u id);
mSignin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
检查互联网();
}
});
}
私人互联网(){
国际单项体育联合会(互联网)
//做点什么
其他的
新建CheckInternetConnection().execute();
}
类CheckInternetConnection扩展了异步任务{
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果)
hasInternet=正确;
其他的
hasInternet=错误;
检查互联网();
}
@凌驾
受保护的布尔doInBackground(Void…params){
返回true;
}
}
}
一种方法是:
public class TwitterActivity extends Activity {
private boolean hasInternet = false;
private Button mSignin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin = (Button)findViewById(R.id.login_id);
mSignin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... params) {
// TODO: put your async job here
return true;
}
@Override
protected void onPostExecute(Boolean result){
hasInternet = result;
if( hasInternet ) {
// do some stuff
//
} else {
// do some other stuff
}
}
}.execute();
}
});
}
}
公共类TwitterActivity扩展活动{
私有布尔值=false;
专用按钮mSignin;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twitter);
mSignin=(按钮)findViewById(R.id.login\u id);
mSignin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
新建异步任务(){
@凌驾
受保护的布尔doInBackground(Void…params){
//TODO:将异步作业放在此处
返回true;
}
@凌驾
受保护的void onPostExecute(布尔结果){
hasInternet=结果;
国际单项体育联合会(互联网){
//做点什么
//
}否则{
//做些别的事情
}
}
}.execute();
}
});
}
}
我知道这是有道理的,但是CheckInternetConnection
必须在异步任务中运行,因为否则它会给我一些错误。如果没有internet连接,您认为它可能进入无限循环吗?是的,所以您需要在那里进行某种检查。您可以尝试3次,然后显示错误。