java连续internet签入后台Android
我写了一个类来检查是否有互联网连接,现在我想每隔1-2秒检查一次是否有互联网关闭特殊提示
我在扩展AsyncTask的活动中添加了类,并在此类中执行此操作。代码如下:
public class NoInternet extends Activity {
private ConnectionDetector cd;
public Boolean isInternetPresent;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nointernet);
new RefreshTask().execute();
}
public void closeActivity() {
super.onBackPressed();
overridePendingTransition(0, 0);
}
@Override
public void onBackPressed() {
}
class RefreshTask extends AsyncTask {
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
String text = String.valueOf(System.currentTimeMillis());
isInternetPresent = cd.isConnectingToInternet();
if(isInternetPresent) {
closeActivity();
}
}
@Override
protected Object doInBackground(Object... params) {
while (!isInternetPresent) {
try {
//sleep for 1s in background...
Thread.sleep(1000);
publishProgress();
} catch (InterruptedException e) {
e.printStackTrace();
};
}
return null;
}
}
}
而且它不能正常工作。。。有什么建议或提示吗
# 1 楼答案
您也可以尝试此服务类。只需将时间间隔设置为秒,并将url设置为ping:
Android Check Internet Connection
只需记住将服务添加到清单文件,并添加权限
# 2 楼答案
这样做是错误的。首先,如果您一直在后台需要一些东西,请使用线程,而不是异步任务。它不仅更适合,而且使用AsyncTask会破坏其他AsyncTak,因为它们默认在单个线程上执行
其次,它在电池和CPU方面比轮询更有效。对http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION使用广播接收器,而不是轮询连接状态
# 3 楼答案
你完全没有说明它是如何失败的
让我猜两种可能性:
execute(...)
方法提交的异步任务将在后续任务启动之前运行到完成。由于此任务将永远运行,因此它将阻止后续任务李>看看AlarmManager。您可以使用它来安排重复的任务