gpt4 book ai didi

java - OutOfMemoryError 通过使用 java.util.Timer

转载 作者:搜寻专家 更新时间:2023-11-01 08:49:10 25 4
gpt4 key购买 nike

Timer mTimer;

void scheduleSyncIn(int aSeconds){
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
mTimer = new Timer();
TimerTask task = new TimerTask() {

@Override
public void run() {
handleTimeout();
}
};

if (request) {
mTimer.schedule(task, aSeconds * 1000);
}
}

定时器任务调用的方法

void handleTimeout(){
Handler mainHandler = new Handler(mContext.getMainLooper());
Runnable runnable = new Runnable(){

@Override
public void run() {
sync(); //call the sync
}
};
mainHandler.post(runnable);
}

由此我从 Play 商店获得了以下报告

java.lang.OutOfMemoryError: pthread_create (stack size 16384 bytes) failed: Try again
at java.lang.VMThread.create(Native Method)
at java.lang.Thread.start(Thread.java:1029)
at java.util.Timer$TimerImpl.<init>(Timer.java:192)
at java.util.Timer.<init>(Timer.java:367)
at java.util.Timer.<init>(Timer.java:387)
at java.util.Timer.<init>(Timer.java:394)
at com.example.Manager.scheduleSyncIn(Manager.java:66)
at com.example.Manager.scheduleSync(Manager.java:56)
at com.example.Manager.RequestDone(Manager.java:180)
com.example.Manager.Remote$GetMetaData.onPostExecute(Remote.java:338)
at com.example.Manager.Remote$GetMetaData.onPostExecute(Remote.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5137)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)

现在我不知道为什么在每次初始化前取消计时器并为 GC 释放计时器时出现此错误。谢谢你的帮助。

最佳答案

我建议在 android 中使用 Handler 而不是 Timer,因为它会导致 memory leaks在您的应用程序中。

示例:

  Handler mHandler;
Runnable mRunnable;
void scheduleSyncIn(int aSeconds){
mHandler = new Handler();
mRunnable = new Runnable() {

@Override
public void run() {
mHandler.postDelayed(mRunnable, aSeconds);
}
};
mHandler.postDelayed(mRunnable, aSeconds);

}

关于java - OutOfMemoryError 通过使用 java.util.Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25280016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com