我正在开发一个Android 2.3.3应用程序,我需要每隔X秒运行一个方法.
在iOS中,我有NSTimer,但在Android中我不知道该使用什么.
有人推荐我Handler ; 另一个推荐我AlarmManager,但我不知道哪种方法更适合NSTimer.
这是我想在Android中实现的代码:
timer2 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
target:self
selector:@selector(loopTask)
userInfo:nil
repeats:YES
];
timer1 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
target:self
selector:@selector(isFree)
userInfo:nil
repeats:YES
];
Run Code Online (Sandbox Code Playgroud)
我需要一些像NSTimer一样的东西.
你推荐我什么?
假设我想每10秒执行一次操作,并不一定需要更新视图.
问题是:使用带有timertask的计时器是否更好(我的意思是更有效率和更有效),如下所示:
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
Run Code Online (Sandbox Code Playgroud)
或者只是一个带有postdelayed的处理程序
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Run Code Online (Sandbox Code Playgroud)
如果您能解释何时使用哪种方法以及为什么其中一种方法比另一种方法更有效(如果它实际上是这样),我将不胜感激.
我正在使用计时器来制作秒表.计时器通过增加整数值来工作.我想通过不断更新textview在活动中显示此值.
这是我尝试更新活动的textview服务的代码:
protected static void startTimer() {
isTimerRunning = true;
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
elapsedTime += 1; //increase every sec
StopWatch.time.setText(formatIntoHHMMSS(elapsedTime)); //this is the textview
}
}, 0, 1000);
}
Run Code Online (Sandbox Code Playgroud)
关于在错误的线程中更新UI,我遇到了一些错误.
如何调整我的代码来完成不断更新textview的任务?
请看下面的代码:
public class MyGridFragment extends Fragment{
Handler myhandler = new Handler() {
@Override
public void handleMessage(Message message) {
switch (message.what) {
case 2: {
ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
urls.addAll(theurls);
theimageAdapter.notifyDataSetChanged();
dismissBusyDialog();
break;
}}}};
}
Run Code Online (Sandbox Code Playgroud)
当我使用这样的处理程序时,我得到一个警告"处理程序应该是静态的,否则它容易发生内存泄漏." 有人能告诉我这样做的最佳方法是什么?
我正在开发一个应用程序,用户可以下载不同的内容包.对于下载过程,我使用的是DownloadManager类.那个到目前为止工作正常.
我的问题是如何获得使用DownloadManager启动的正在运行的下载的当前进度.我知道有buildin下载通知等等.但对我来说,我必须获得正在运行的下载的进度,以便我可以使用它来显示我的应用程序中自定义进度条的进度.到目前为止,我无法检索进度.
它是否可能,或者我只是盲目而无法找到解决方案.
希望有人可以帮助我......
我想在android活动中定期运行一个方法,在x秒后更新某个字段.我知道它可以在timerTask中完成但是最好的方法是什么?代码示例会很有帮助.
在我的应用程序中,我使用Gridview创建了一个日历,在Gridview中,我在Imageview的帮助下显示日期和一些事件的可用性,为此,我创建了一个处理程序.
现在我想停止处理程序.
MainActivity.java
// inside oncreate
Handler handler = new Handler();
refreshCalendar();
// outside oncreate
public void refreshCalendar() {
calAdapter.refreshDays();
calAdapter.notifyDataSetChanged();
handler.post(calendarUpdater);
calTitle.setText(android.text.format.DateFormat.format("MMMM yyyy", cal));
}
public Runnable calendarUpdater = new Runnable() {
@Override
public void run() {
items.clear();
allData = new ArrayList<HashMap<String,String>>();
allData.clear();
allData = db.showAllEvents();
String currentDate = (String)android.text.format.DateFormat.format("MM/yyyy", cal);
for(int i=0; i<allData.size(); i++)
{
String date[] = allData.get(i).get("date").split("/");
String md[] = currentDate.split("/");
if(date[1].equals(md[0]) && date[2].equals(md[1]))
{
items.add(date[0]);
System.out.println("dates: "+date[0]);
}
}
calAdapter.setItems(items);
calAdapter.notifyDataSetChanged();
}
};
Run Code Online (Sandbox Code Playgroud)
请告诉我应该如何以及在哪里禁用此线程.
我需要一个创建一个Android应用程序,用于录制语音,同时显示语音(声音)级别的可视化.
我已经创建了一个录音应用程序,但我无法添加声级可视化.我该怎么做?
请有人帮我提供建议或示例教程链接或代码.
我有N个文件要下载.我想在后台连续下载它们 - 一个接一个.我想在ListView中显示进度和状态.所以,ListView看起来像:
File1 ...已下载
文件2 ....下载
File3 ...正在进行中说39%
File4 ......待定
....
Listview定期刷新(比如每2秒),文件很大:50 MB左右.所以他们需要1分钟以上才能下载.
我将文件URL列表传递给AsyncTask并将其下载到后台.问题是如何将进度反馈回ListView.
考虑用户可能会离开ListView页面离开AsyncTask只能返回以查看下载状态.
那么ListView如何"观察"AsyncTask的进度并显示它呢?
我正在考虑添加一组静态变量AsyncTask(使用"Synchronized"块保护它们)并在Fragment中使用显示ListView的定期UI更新程序.所以片段会有这样的东西:
是否有设计模式,公共项目或示例代码?
对不起,我不是一张好照片.我所描述的最接近的是这里(类似但我计划使用AsyncTask和串行下载):

android listview android-listview android-asynctask android-fragments
我正在尝试定期执行某项操作.我想创建一个类的新实例,比如说,持续3秒.最好通过使用Handler或Thread来实现它吗?我可以尝试一种更容易,更笨拙的方式吗?我真的不擅长使用线程 - 我想学习,但更重要的是我要在完成编程实践之前让它运行起来.
new Thread(){
public void run(){
//makes sure the player still has 3 lives left
while(game == false){
uiCallback.sendEmptyMessage(0);
try {
Thread.sleep(2000); // wait two seconds before drawing the next flower
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //sleep for 2 seconds
}
}
}.start();
Run Code Online (Sandbox Code Playgroud)