Android 连续调用网络操作?
Android calling a network operation continuously?
在我的 android 应用程序中,我必须每 30 秒调用一次网络操作。
现在我从 activity 的简历中调用以下代码。
new Thread(new Runnable() {
public void run() {
while(true){
try {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
wait(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
但它会导致以下异常
java.lang.IllegalMonitorStateException: object not locked by thread before wait().
如何实现上述功能?
我会在你的情况下使用 Timer/TimerTask。计时器在不同的线程上运行,您可以将其安排在固定的时间间隔内。例如
class MyTimerTask extends TimerTask {
public void run() {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
}
}
和onCreate
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), new Date(), 30000);
关于你的例外情况
wait()
需要一个 synchronized
块和一个锁对象。常见用法通过对 wait()
/notify()
,并且由于它们通常在不同的线程上调用,因此您需要一个 synchronized
块来保证对锁本身的正确访问。
public static final Object mLock = new Object();
new Thread(new Runnable() {
public void run() {
synchronized(mLock) {
while(true){
try {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
mLock.wait(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
在我的 android 应用程序中,我必须每 30 秒调用一次网络操作。
现在我从 activity 的简历中调用以下代码。
new Thread(new Runnable() {
public void run() {
while(true){
try {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
wait(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
但它会导致以下异常
java.lang.IllegalMonitorStateException: object not locked by thread before wait().
如何实现上述功能?
我会在你的情况下使用 Timer/TimerTask。计时器在不同的线程上运行,您可以将其安排在固定的时间间隔内。例如
class MyTimerTask extends TimerTask {
public void run() {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
}
}
和onCreate
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), new Date(), 30000);
关于你的例外情况
wait()
需要一个 synchronized
块和一个锁对象。常见用法通过对 wait()
/notify()
,并且由于它们通常在不同的线程上调用,因此您需要一个 synchronized
块来保证对锁本身的正确访问。
public static final Object mLock = new Object();
new Thread(new Runnable() {
public void run() {
synchronized(mLock) {
while(true){
try {
HTTPConnection httpConnection = new HTTPConnection();
httpConnection.extendSession(userId);
mLock.wait(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();