gpt4 book ai didi

java - Android 服务每 10 秒运行一次就会出现 ANR 消息

转载 作者:行者123 更新时间:2023-12-01 12:09:07 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,其中包含一个向用户显示信息的主要 Activity 。

当 MainActivity 启动时,将创建/启动一个服务,该服务每 10 秒检查一次 Web 服务 - 如果 Web 服务结果将显示在通知中。

我使用 Intent 从主 Activity 启动服务,

getActivity().startService(new Intent(getActivity(), NotificationService.class));

我也尝试了这个代码,(但结果相同)。

getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
getActivity().startService(new Intent(getActivity(), NotificationService.class));
}
});

如果服务启动,我会在 Logcat 中收到警告,

跳过了 91 帧!应用程序可能在其主线程上做了太多工作。

我的通知服务代码,

 public class NotificationService extends Service {
// constant
public static final long NOTIFY_INTERVAL = 10 * 1000; // 10 seconds
long current_times;
String c_time;
// run on another Thread to avoid crash
private Handler mHandler = new Handler();
// timer handling
static HttpClient client = new DefaultHttpClient();
private Timer mTimer = null;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override
public void onCreate() {
// cancel if already existed

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
SharedPreferences.Editor editor = getSharedPreferences("notification_oldtime", MODE_PRIVATE).edit();

editor.putInt("old_trail_time", 0);
editor.putInt("old_sample_time", 0);
editor.putInt("old_neworder_time", 0);

editor.commit();

if(mTimer != null) {
mTimer.cancel();
} else {
// recreate new
mTimer = new Timer();
}
// schedule task
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
}

public long current_time_get(){

return current_times;

}





class TimeDisplayTimerTask extends TimerTask {

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override
public void run() {
// run on another thread

mHandler.post(new Runnable() {

@Override
public void run() {
// My webservice code for notification
}

}
}

最佳答案

尝试使用IntentService而不是ServiceIntentService 在单独的线程上完成其工作。

关于java - Android 服务每 10 秒运行一次就会出现 ANR 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27373362/

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