我在我的代码中收到警告:
这个AsyncTask类应该是静态的,否则可能会发生泄漏(匿名android.os.AsyncTask)
完整的警告是:
此AsyncTask类应该是静态的,否则可能会发生泄漏(匿名android.os.AsyncTask)静态字段将泄漏上下文.非静态内部类具有对其外部类的隐式引用.如果该外部类例如是片段或活动,则此引用意味着长时间运行的处理程序/加载器/任务将保留对活动的引用,从而阻止其收集垃圾.同样,对来自这些较长时间运行的实例的活动和片段的直接字段引用可能会导致泄漏.ViewModel类绝不应指向视图或非应用程序上下文.
这是我的代码:
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
return null;
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
我该如何纠正?
我试图在我的Android应用程序延迟后显示一些代码.
执行此操作的Java代码如下所示:
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
// your code that you want to delay here
}
}, 1000/* 1000ms = 1sec delay */);
Run Code Online (Sandbox Code Playgroud)
我如何使用C#在Xamarin.Android中执行此操作?
我是Android应用程序开发的初学者.我正在使用android中的线程.我已经阅读了runOnUiThread主UI上的哪些运行代码(如果我没错?我猜.).
我的问题是主UI上的普通代码和内部代码之间的区别是什么runOnIUThread.
实施例:1
class A
{
getDataFromServer(foo);//Code on mainUI
}
Run Code Online (Sandbox Code Playgroud)
例如:2
getActivity.runOnUiThread(new Runnable(){
@Override
public void run(){
getDataFromServer(foo);
}
});
Run Code Online (Sandbox Code Playgroud)
这两个例子有什么区别.请帮助我.你的回应对我来说是一个新的学习.
localChatManager.addIncomingListener { from, message, chat ->
Log.v(TAG,"listener")
//You can't modify views from non-UI thread.
this@chatActivity.runOnUiThread { object :Runnable{
override fun run() {
Log.i(TAG,"runOnUiThread")
}
} }
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么runOnUiThread不工作但在该方法之外一切正常.
不知何故它不起作用,据我说它应该是这样的:
public void Splash(){
Timer timer= new Timer();
timer.schedule(new TimerTask(){
MexGame.this.runOnUiThread(new Runnable() {
public void run(){
SplashImage.setImageDrawable(aktieknop);
} //Closes run()
}); //Closes runOnUiThread((){})
},SplashTime); //Closes the Timeratask((){})
} //closes Splash()
Run Code Online (Sandbox Code Playgroud)
有人知道我错过了什么吗?
正式评论 我知道愚蠢的问题,或者我正在做一些不可能的事情,但我尝试了所有合乎逻辑的可能性.所以可能遗漏了一些东西,或者我正在尝试做一些不可能的事情.你能帮帮我吗?我正在尝试使用以下代码,但这会产生令牌问题:
Timer timer= new Timer();
timer.schedule(new TimerTask(){
runOnUiThread(new Runnable() {
public void run(){
SplashImage.setImageDrawable(aktieknop);}
});}
},SplashTime);
Run Code Online (Sandbox Code Playgroud)
如果我阻止了runOnUiThread,它会崩溃,因为我正在尝试从另一个线程调整UI,但至少没有令牌问题,任何人都有任何想法?:
Timer timer= new Timer();
timer.schedule(new TimerTask(){
// runOnUiThread(new Runnable() {
public void run(){
SplashImage.setImageDrawable(aktieknop);}
// });}
},SplashTime);
Run Code Online (Sandbox Code Playgroud) android punctuation runnable timertask android-runonuithread
我不明白 kotlin 协程是如何工作的。我需要在异步线程上做很长时间的工作,并在 Android 应用程序的 UI 线程上获取结果。有人可以给我一些例子吗?例如
private fun getCountries(){
viewModelScope.launch {
val a = model.getAllCountries()
countriesList.value = a
}
}
Run Code Online (Sandbox Code Playgroud)
午餐 model.getAllCountries() 会异步但最后我怎样才能得到 UI 线程的结果?
我有一个调用runOnUiThread如下的函数
fun myFunction(myObject: MyClass, view: MyView) {
// Do something
view.getActivity().runOnUiThread {
myObject.myObjectFunction()
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过UnitTest myFunction确保myObjecthas调用myObjectFunction。但是鉴于它已经包装好了runOnUiThread,我无法解决它。
如何进行单元测试以确保runOnUiThread调用其中的代码?
我正在使用 Sumup SDK 创建通往 React Native 的桥梁。大部分艰苦的工作已经完成,但我试图在处理交易之前调用特定的函数来唤醒读卡器。
我原来的代码是这样的:
@ReactMethod
public void prepareCardTerminal() {
SumUpAPI.prepareForCheckout();
}
}
Run Code Online (Sandbox Code Playgroud)
然后 RN 桥接器调用此函数,如下所示:
static prepareCardTerminal() {
NativeRNSumup.prepareCardTerminal();
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个 React Native 错误:
Must be called on main thread
Run Code Online (Sandbox Code Playgroud)
我读到这可能意味着它需要在 UI 线程上运行,所以我将函数重写为:
@ReactMethod
public void prepareCardTerminal() {
new Thread(new Runnable() {
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}
Run Code Online (Sandbox Code Playgroud)
然而,这并没有达到预期的结果(即使它没有显示任何错误)。
任何提示将不胜感激。
编辑:我找到了这个问题的解决方案。我使用 UiThreadUtil:
import com.facebook.react.bridge.UiThreadUtil;
...
@ReactMethod
public void prepareCardTerminal() {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}
Run Code Online (Sandbox Code Playgroud) 在单独的线程中发送广播(在我的例子中为 ACTION_APPWIDGET_UPDATE)是否比 UI 线程(可运行)更好(为了性能)?或者在 UI 线程上这样做是否可以接受?
我正在开发一个Xamarin.Android应用程序,它引用了一个带有viewmodels的可移植类库.正在使用MvvmCross.我需要一个Timer,每次"滴答"时都会更新UI.我似乎无法让它更新UI.正如使用调试器确认的那样,它每秒执行一次Tick方法.我需要使用RunOnUiThread方法,但我不确定如何在Xamarin中实现它.将会感谢使得tick更新UI线程的代码示例.
Ticker.cs:
using System;
using Pong.Core.Models;
using Pong.Core.ViewModels;
using System.Threading;
namespace Pong.Droid
{
public class Ticker
{
private readonly Timer _dispatcherTimer;
private readonly GamePlayViewModel _viewModel;
public Ticker(GamePlayViewModel viewModel)
{
_viewModel = viewModel;
TimerCallback timerDelegate = new TimerCallback (Tick);
_dispatcherTimer = new Timer (timerDelegate, null, 0, 1000);
}
public void Tick(object state)
{
_viewModel.Number++;
//_viewModel.UpdateBall();
//_viewModel.UpdatePaddle1();
}
}
}
Run Code Online (Sandbox Code Playgroud)
活动:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using …Run Code Online (Sandbox Code Playgroud) android ×9
kotlin ×3
c# ×2
runnable ×2
xamarin ×2
java ×1
punctuation ×1
react-native ×1
timer ×1
timertask ×1
unit-testing ×1