我尝试使用以下代码触发器吐司作为后台服务,但它执行执行了20次,它直到100没有工作。使用线程它不起作用会给出错误。
感觉服务被破坏。
如果应用已关闭,如何以30分钟差异作为后台服务触发通知
我需要展示早上好,下午好,晚安,晚安作为通知。
没有任何互联网支持。
以下程序不正常吗?我认同。怎么做?
import android.app.Service;
public class HelloService extends Service {
private static final String TAG = "HelloService";
int i=0;
private boolean isRunning = false;
@Override
public void onCreate() {
Log.i(TAG, "Service onCreate");
Toast.makeText(this, " On create Hello Service Started", Toast.LENGTH_LONG).show();
isRunning = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Service onStartCommand");
for (;i<100; i++) {
try {
// Thread.sleep(1000);
Toast.makeText(getApplicationContext(), "Hello Service On Loop"+i , Toast.LENGTH_LONG).show();
//
} catch (Exception e) {
}
}
//Stop service once it finishes its task
// i++;
stopSelf();
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, "Service onBind");
return null;
}
@Override
public void onDestroy() {
isRunning = false;
Log.i(TAG, "Service onDestroy");
}
}
答案 0 :(得分:1)
onStartCommand()
。如果在onStartCommand()
内执行循环,Android将在大约30秒后使用ANR(应用程序无响应)终止进程,因为您无法阻止主(UI)线程。
您可以使用AlarmManager
设置定时器,以便在特定时间启动Service
或触发BroadcastReceiver
,或者发布Runnable
} Handler
中的onStartCommand()
有一定的延迟并在Runnable
中执行任何操作,或者您可以在onStartCommand()
中启动后台线程,后台线程可以循环和睡觉或其他什么,然后做你想要的。
无论如何,您无法每秒显示Toast
。这将使用toast充斥UI,并且Android会抛弃大部分(忽略它们),或者UI会如此忙碌地向他们展示Android会因ANR而杀死你的应用程序,或者用户只是卸载你的应用程序!