我正在使用AsyncTasks来获取数据以响应用户按下按钮.这很好用并且在获取数据时保持接口响应,但是当我检查Eclipse调试器中发生了什么时,我发现每次AsyncTask创建一个新的(这通常是因为它们只能使用一次),正在创建一个新线程,但从未终止.
结果是大量的AsyncTask线程就坐在那里.我不确定这在实践中是否是一个问题,但我真的想摆脱那些额外的线程.
我怎么能杀死这些线程?
如何Drawable在绘制资源时从资源中加载?例如,我想绘制一个箭头,并且能够在绘制时将其旋转到面向不同的方向?
我有一个AsyncTask获取一些数据,然后用这个新数据更新UI.它已经工作好几个月,但我最近添加了一个功能,当有新数据时显示通知.现在,当我的应用程序通过通知启动时,有时我会得到此异常并且onPostExecute不会被调用.
这是应用程序启动时发生的情况:
1)展开UI并查找视图
2)取消AlarmManager检查新数据并重置警报的警报(通过).(这样,如果用户禁用警报,则在下次重新启动之前将其取消.)
3)开始AsyncTask.如果应用程序是从通知启动的,请传入一些数据,然后取消通知.
我被困在导致这个异常的原因上.似乎异常来自AsyncTask代码,所以我不确定如何解决它.
谢谢!
这是一个例外:
I/My App( 501): doInBackground exiting
W/MessageQueue( 501): Handler{442ba140} sending message to a Handler on a dead thread
W/MessageQueue( 501): java.lang.RuntimeException: Handler{442ba140} sending message to a Handler on a dead thread
W/MessageQueue( 501): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179)
W/MessageQueue( 501): at android.os.Handler.sendMessageAtTime(Handler.java:457)
W/MessageQueue( 501): at android.os.Handler.sendMessageDelayed(Handler.java:430)
W/MessageQueue( 501): at android.os.Handler.sendMessage(Handler.java:367)
W/MessageQueue( 501): at android.os.Message.sendToTarget(Message.java:348)
W/MessageQueue( 501): at android.os.AsyncTask$3.done(AsyncTask.java:214)
W/MessageQueue( 501): at java.util.concurrent.FutureTask$Sync.innerSet(FutureTask.java:252)
W/MessageQueue( 501): at java.util.concurrent.FutureTask.set(FutureTask.java:112) …Run Code Online (Sandbox Code Playgroud) 除了设置和准确的时间(即午夜)与设置延迟(即24小时)之外,使用AlarmManager和ScheduledExecutorService定期运行任务之间的区别是什么?
就我而言,我需要运行一些代码来检查每晚的新数据,并在有新数据时创建新通知.
谢谢!
当我尝试通过Eclipse将Android应用程序安装到设备时,我刚刚开始收到以下错误:
Installation failed due to invalid URI!
Please check logcat output for more details.
Launch canceled!
Run Code Online (Sandbox Code Playgroud)
我还尝试在bin文件夹中安装APK 和通过adb 安装签名的APK.当我这样做时,我收到一个INSTALL_FAILED_INVALID_URI错误.
我没有改变任何关于我的设置,它曾经没有问题的工作.
有任何想法吗?谢谢!
LogCat输出:
D/AndroidRuntime(32345): CheckJNI is OFF
D/dalvikvm(32345): Unable to stat classpath element '/system/framework/com.orange.authentication.simcard.jar'
D/AndroidRuntime(32345): Calling main entry com.android.commands.pm.Pm
V/Performance(32111): >>com.android.defcontainer.DefaultContainerService@40d944a8 onCreate
V/Performance(32111): <<com.android.defcontainer.DefaultContainerService@40d944a8 onCreate, 3ms
V/Performance(32111): >>com.android.defcontainer.DefaultContainerService@40d944a8 onBind
V/Performance(32111): <<com.android.defcontainer.DefaultContainerService@40d944a8 onBind, 1ms
W/asset (32111): Asset path /data/local/tmp/CS2110Project.apk is neither a directory nor file (type=0).
W/DefContainer(32111): Failed to parse package
W/ActivityManager( 744): No content provider found for …Run Code Online (Sandbox Code Playgroud) 当垃圾收集器运行时,我的Android游戏中偶尔会出现滞后现象.我运行DDMS并发现我的应用程序分配的所有内存都来自这一行:
scoreString = String.valueOf(score);
Run Code Online (Sandbox Code Playgroud)
在不分配任何内存的情况下将整数转换为字符串的最佳方法是什么?
我正在尝试在获取数据ProgressDialog时进行简单的显示AsyncTask.在我的onPreExecute()方法中我有这个:
pd = ProgressDialog.show(c, "Loading...", "Please wait");
Run Code Online (Sandbox Code Playgroud)
c传递到我的构造背景下AsyncTask的this.getApplicationContext().不幸的是,我不断收到此消息的异常:
无法添加窗口 - 令牌null不适用于应用程序
我究竟做错了什么?
更新:使用this而不是this.getApplicationContext()显示另一个问题.当我打电话时ProgressDialog.show(...,会显示ProgressDialog,但直到AsyncTask完成后才会显示.换句话说,数据加载然后显示对话框.如果我包括pd.dismiss()在我onPostExecute()当时我甚至从未看到对话框(因为它在打开之前已关闭).
最终解决方案:事实证明,这fetch.get()是占用UI线程而不是让ProgressDialog显示.
通过思考"Pandora for Android",最容易理解这方面的一个例子.
我的活动有一个VideoView在课堂上播放讲座.我希望能够不间断地从此活动切换到另一个活动(在我的应用程序中,或转到另一个应用程序(主屏幕,其他一些应用程序)).
使用Pandora示例我可以在播放音乐时转到"切换广播电台"视图,然后我可以转到主屏幕并继续无缝导航.
这仅适用于视频或音频吗?我可以只播放视频文件中的音频,然后轻松切换回来吗?
我有一个源于现有代码的大量类型.让我们说它看起来像这样:
type some_type =
| Variant1 of int
| Variant2 of int * string
Run Code Online (Sandbox Code Playgroud)
虽然这两个Variant1和Variant2在其他地方使用,我有一个只能对特定的功能Variant2:
let print_the_string x =
match x with
| Variant2(a,s) -> print_string s; ()
| _ -> raise (Failure "this will never happen"); ()
Run Code Online (Sandbox Code Playgroud)
由于此辅助函数仅从另一个地方调用,因此很容易显示它将始终使用输入调用Variant2,而不是输入Variant1.
让我们说这个电话看起来像这样:
let () =
print_the_string (Variant2(1, "hello\n"))
Run Code Online (Sandbox Code Playgroud)
如果Variant1和Variant2是不同的类型,我希望OCaml的推断类型Variant2 -> ()的print_the_string,但是,因为它们是相同的总和型的两种变体,OCaml的推断签名some_type -> ().
当我遇到一个抛出异常的程序时,会发出一条消息,例如"这将永远不会发生",我通常认为原来的程序员做错了什么.
当前的解决方案有效,但这意味着程序中的错误将在运行时捕获,而不是作为编译器错误而不是更好.
理想情况下,我希望能够像这样注释函数:
let print_the_string (x : some_type.Variant2) = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要下载图像并在ImageView中显示它的Android应用程序.Bitmap传递给主java文件并添加到图像视图中,如下所示:
comic = (ImageView) findViewById(R.id.comic);
comic.setImageBitmap(c.getImageBitmap());
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了图像的左侧从屏幕上消失.ImageView位于ScrollView中,可保持正确的大小.这意味着ScrollView右侧有黑色空间,图像向左侧切断.
ImageView的XML是这样的:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/comic"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_gravity="center"
android:src="@drawable/xkcdlogo" />
</HorizontalScrollView>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
知道为什么我的图像会被切断吗?
谢谢!
对于常见的Android图标(例如上下文菜单图标),我通常会将标准的Android图标复制到我的项目中.我最近意识到你也可以从系统中获取这些图标android.R.drawable.blablabla.所以我的问题是,有没有理由更喜欢一种方法而不是另一种方法?
如果使用系统更好,你如何用XML访问它们?
谢谢!
android ×10
alarmmanager ×2
java ×2
apk ×1
bitmap ×1
graphics ×1
imageview ×1
ocaml ×1
scheduling ×1
video ×1