Java 记录runnable的实例
我对java没有太多经验,但据我所知,Java 记录runnable的实例,java,android,Java,Android,我对java没有太多经验,但据我所知,Runnable只是一个接口,它将强制类使用一些代码实现run()函数,这些代码将在调用线程中执行。 我经常喜欢在这样的函数中使用此功能: public static void sleep和runonuithread(整数毫秒,@NonNull可运行操作,@NonNull活动){ Log.e(标签“sleepAndRunOnUiThread:Received millis=“+millis”); Log.e(标记“sleep和runonuithread:re
Runnable
只是一个接口,它将强制类使用一些代码实现run()
函数,这些代码将在调用线程中执行。我经常喜欢在这样的函数中使用此功能:
public static void sleep和runonuithread(整数毫秒,@NonNull可运行操作,@NonNull活动){
Log.e(标签“sleepAndRunOnUiThread:Received millis=“+millis”);
Log.e(标记“sleep和runonuithread:received Runnable action=“+action.toString());
新线程(()->{
试一试{
睡眠(毫秒);
activity.runOnUiThread(动作);
}捕捉(中断异常e){
e、 printStackTrace();
}
}).start();
}
一个简单的函数,可以用来在延迟后在ui线程上运行东西。但是有没有一种方法可以在给定的runnable
操作中打印代码行呢?正如@commonware所说,我们不能只按原样打印源代码。是的,我现在正在传递一个IllegalStateException
的实例,用于识别调用类(有点像黑客,但有效)
public static void sleep和runonuithread(整数毫秒,@NonNull可运行操作,异常eCaller,@NonNull活动){
Log.e(标签“sleepAndRunOnUiThread:Received millis=“+millis”);
Log.e(标记“sleepAndRunOnUiThread:Received Runnable action from=“+eCaller.getMessage());//我在这里传递操作描述
新线程(()->{
试一试{
睡眠(毫秒);
activity.runOnUiThread(动作);
}捕捉(中断异常e){
e、 printStackTrace();
}
}).start();
}
Java是一种编译语言。Java源代码行不在您编译的应用程序中,因此无法打印它们。@Commonware哦,好的,谢谢您提供的信息。是否有其他可能的方法(从上述参数)记录调用此函数的类的详细信息?您可以创建异常的实例(例如,new IllegalStateException(“ick”)
)。然后可以记录异常,或者访问堆栈跟踪元素并使用它们。请记住,如果您使用ProGuard/D8混淆代码,那么堆栈跟踪也会混淆。您到底需要知道什么以及为什么?@ThorbjørnRavnAndersen上述函数是我的实用程序类的一部分,在不同的时间点被许多其他类调用。我想知道哪个类在我的日志中调用这个函数。一个类名就足够了,我猜我通过活动实例就可以获得这样的信息(目前不在笔记本电脑上,所以无法检查)。起初,我希望在日志中获得可运行操作的全部代码,但正如Commonware所指出的,这是不可能的