我想在加载资源(图像和声音)时有一个闪屏.我怎么知道一切都装满了?是否在应用启动时加载了所有资源?
谢谢
我正在使用asyncTasks,用图像加载列表元素(只需按照android的有效加载位图的教程)
在DDMS中,我可以看到最多5个AsyncTasks正在运行
此外,我还添加了另一个AsyncTask,它使用MediaCodec类执行一些解码.
现在在DDMS中,我仍然看到5个AsyncTasks,我的图像加载aynctask或解码异步任务执行,而不是两个.
当解码正在运行时,如果我滚动列表,元素的图像不会更新当我通过调用它的执行方法启动新的解码asynctask时,解码不会启动,但如果我现在滚动列表视图,图像会更新.
那么AsyncTask是否有限制?
即使在listAdapter中,我也会根据getView调用启动AsyncTask.我期待7个运行asyncTasks(如果列表可见元素是7,比方说),但DDMS只显示5个asynctasks正在运行.
现在有人可以解释一下我无法拼写的黑魔法是什么吗?
android executorservice android-asynctask threadpoolexecutor
在处理应用程序时,我注意到线程数一直在增长.AsyncTask线程由于某种原因保持打开状态(我确信它们已经完成处理并退出).我不知道为什么我会继续创建更多这种类型的线程,并且它们会无限期地继续运行.
有没有办法验证这些线程是否在完成时终止?是否存在AsyncTask线程保持打开的已知问题?
运行时:
public class DoNothingTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我在debbuger中看到每次执行的新线程new DoNothingTask().execute(null);
如下:
Thread[<ThreadNumber>AsyncTask#1](running)
我的问题是为什么会这样?我的应用程序很大程度上依赖于AsyncTask,我不能创建新的线程并在每个任务后保持活跃状态.
我有一个简单的java ExecutorService运行一些任务对象(实现Callable).
ExecutorService exec = Executors.newSingleThreadExecutor();
List<CallableTask> tasks = new ArrayList<>();
// ... create some tasks
for (CallableTask task : tasks) {
Future future = exec.submit(task);
result = (String) future.get(timeout, TimeUnit.SECONDS);
// TASKS load some classes and invoke their methods (they may create additional threads)
// ... catch interruptions and timeouts
}
exec.shutdownNow();
Run Code Online (Sandbox Code Playgroud)
在完成所有任务(DONE或TIMEOUT-ed)之后,我尝试关闭执行程序,但它不会停止:exec.isTerminated() = FALSE.
我怀疑某些被执行的任务未正确终止.
是的,我知道执行者的关闭不能保证任何事情:
除尽力尝试停止处理主动执行任务之外,没有任何保证.例如,典型的实现将通过{@link Thread#interrupt}取消,因此任何未能响应中断的任务都可能永远不会终止.
我的问题是,有没有办法确保这些(任务)线程终止?我提出的最佳解决方案是System.exit()在程序结束时调用,但这很简单.
这应该有一个简单的答案,但我找不到任何答案.因为我还是个假人,所以我来这里问你们.
我一直在创建这个在启动时执行10个AsyncTasks的项目.每个任务包含3个URL,这些URL在那里收集数据,并且在应用程序中尚未执行任何重要操作.
我还有10个textviews,用于跟踪AsyncTasks的进度.
当任务开始时,相应的文本视图被置于"开始"当任务正在进行时,它将其适当的文本视图设置为"正在下载"当任务完成时,它将其适当的文本视图设置为"已完成"
这就是我观察到的并且对AsyncTask提出质疑.当我启动应用程序时,我注意到有5个文本视图被切换到"正在下载"标记,所以我看到5个AsyncTasks正在按照自己的意愿完成工作.完成后,它启动一个新的AsyncTask.然而,他们从未超过5的限制.
是什么导致5个AsynchTasks同时运行的限制?我是否在一些我找不到的文件中导致这种情况?这是android 2.3.3的限制吗?也许是我用来模拟应用程序的设备的限制?
任何人都可以为我详细说明吗?
使用asynctasks的正确方法是什么?假设用户输入一个活动,并且asynctask启动,并且当asynctask正在运行时,用户决定导航到另一个页面.
PrintStatusTask解析gmail收件箱中的内容,查找要报告的各种感兴趣的项目.但是根据调试器为每个PrintStatusTask().execute()创建一个新的AsyncTask.这些任务不应该在退出时死亡吗?他们必须手动杀死吗?
public class Controller extends Activity {
...
private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuStatus:
new PrintStatusTask().execute();
...
class PrintStatusTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
...
return null;
}
@Override
protected void onPostExecute(Void unused) {
this.cancel(true);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个启动画面/加载屏幕,在我的大位图的绘制调用完成后立即有.setVisibility()到GONE.问题是启动画面需要一些弹出窗口,我认为这是由于主要活动启动并在首次运行时执行CPU密集型应用程序.有没有办法尽快显示我的启动画面?如果我在不同的线程中拥有它可能会好吗?启动画面只是一个位图,其下方有一个progressBar.我的布局是基于xml的,所以我看不到自己使用setContentView.谢谢.