- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几天前我构建了自己的网络应用程序。除此之外,我还内置了一个过滤器,它会阻止一些内容并需要验证。 API 可让我连接到我的网络应用程序,然后我可以删除或确认内容。考虑到这一点,我开发了一个 Android 应用程序,只为了我自己,能够尽快处理所有内容。此外,应用程序应该能够立即查看网络服务器是否崩溃(因为我对网络开发还很陌生,这种情况发生的频率比我希望的要高)。
我现在的目标是在手机的通知栏中有一个永久横幅,以向我显示网络应用程序的状态(是否启动,以及我有多少待处理的请求。)这就是为什么我不想实现推送通知
。
我已经有一个 void 可以完成所有这些操作,但只有当我按下应用程序内的按钮时。如果我将其关闭,它就永远不会更新。
到目前为止我的代码结构:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//Get the button
reloadButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(final View view){
LoadInfo();
}
});
}
public void LoadInfo(){
//Handle server request
//Update the notification panel
}
所有这些(包括评论)都有效。我只需要一种像 10 分钟一样调用此方法并更新通知面板的方法。
我尝试过的:
//Inside the onCreate method
AlarmManager alarmMgr;
Intent intent = new Intent(this, com.purplepandagamestudio.zivicontroller.MainActivity.class);
intent.putExtra("LoadInfo", "LoadInfo");
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_FIFTEEN_MINUTES, AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);
来自Android Documentation about scheduled alarms ,我得出的结论是,闹钟可能是实现我想要的行为的最简单方法,尽管
it may not be the best choice for your app, particularly if you need to trigger network operations.
尽管有这样的说法,我认为这可能是可行的方法,因为我是唯一的用户,而且替代方案对我来说似乎相当困难。
有没有一种简单的方法可以在后台运行这个void,我该如何实现这一点,或者我是否必须以不同的方式构建我的应用程序?
编辑
就像 Sulabh Kumar 所建议的那样,我尝试实现 ScheduledThreadPoolExecuter
。我的实现如下所示:
public class MainActivity extends AppCompatActivity {
public void start() throws InterruptedException{
final ScheduledThreadPoolExecutor scheduler = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(1);
final ScheduledFuture<?> getInfo = scheduler.scheduleAtFixedRate(new LoadInfoClass(), 0,2, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
getInfo.cancel(true);
scheduler.shutdown();
}
}, 0, TimeUnit.SECONDS);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//Some stuff
try{
start();
}catch (InterruptedException e){
//Handle error
}
class LoadInfoClass implements Runnable{
public void run(){
//Make the request and update everything
}
}
}
这会导致以下行为:
new LoadInfoClass().run();
按钮时,一切都会按预期运行我实现 ScheduledThreadPoolerExecuter
是否错误?
最佳答案
public class MainActivity extends AppCompatActivity {
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
public void start() throws InterruptedException{
executorService.scheduleAtFixedRate(new LoadInfoClass(), 0,5,
TimeUnit.SECONDS);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//Some stuff
try{
start();
}catch (InterruptedException e){
//Handle error
}
class LoadInfoClass implements Runnable{
public void run(){
//Make the request and update everything
}
}}
当 Activity 被销毁时,关闭执行器服务。
关于java - 重复发送 HTTP 请求,即使应用程序在 Android 上处于后台时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555492/
我是一名优秀的程序员,十分优秀!