我该如何修复这段代码中的弃用警告?或者,是否有其他选项可以实现相同的功能?
我该如何修复这段代码中的弃用警告?或者,是否有其他选项可以实现相同的功能?
Handler().postDelayed({
context?.let {
//code
}
}, 3000)
我该如何修复这段代码中的弃用警告?或者,是否有其他选项可以实现相同的功能?
我该如何修复这段代码中的弃用警告?或者,是否有其他选项可以实现相同的功能?
Handler().postDelayed({
context?.let {
//code
}
}, 3000)
import android.os.Looper
import android.os.Handler
inline fun delay(delay: Long, crossinline completion: () -> Unit) {
Handler(Looper.getMainLooper()).postDelayed({
completion()
}, delay)
}
示例:
delay(1000) {
view.refreshButton.visibility = View.GONE
}
在 Handler 构造函数中提供一个 looper。
Handler(Looper.getMainLooper())
如果您正在使用变量作为Handler和Runnable,请按照以下方式使用:
private Handler handler;
private Runnable runnable;
handler = new Handler(Looper.getMainLooper());
handler.postDelayed(runnable = () -> {
// Do delayed stuff here
handler.postDelayed(runnable, 1000);
}, delay);
同时,您需要在 onDestroy() 方法中删除回调函数。
@Override
public void onDestroy() {
super.onDestroy();
if (handler != null) {
handler.removeCallbacks(runnable);
}
}
Kotlin协程
private val SPLASH_SCREEN_TIME_OUT_CONST: Long = 3000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
GlobalScope.launch {
delay(SPLASH_SCREEN_TIME_OUT_CONST)
goToIntro()
}
}
private fun goToIntro(){
startActivity(Intent(this, IntroActivity::class.java))
finish()
}
在Kotlin中使用这种结构是个好主意。
companion object Run {
fun after(delay: Long, process: () -> Unit) {
Handler(Looper.getMainLooper()).postDelayed({
process()
}, delay)
}
}
Run.after(SPLASH_TIME_OUT) {
val action = SplashFragmentDirections.actionSplashFragmentToLogin()
v.findNavController().navigate(action)
}
Java答案
我编写了一个易于使用的方法。您可以直接在项目中使用此方法。delayTimeMillis可以是2000,这意味着此代码将在2秒后运行。
private void runJobWithDelay(int delayTimeMillis){
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
//todo: you can call your method what you want.
}
}, delayTimeMillis);
}
对于 Xamarin Android,不要使用
Handler handler;
handler = new Handler();
只需编写
Handler handler;
handler = new Handler(Looper.MyLooper());
代码的其余部分是没问题的。
当我们从头开始创建全屏活动时,Android Studio 4.0.1会生成handler()等代码。我知道我们被鼓励使用Kotlin,我也确实在使用,但有时我会使用示例项目来启发灵感。 奇怪的是,AS生成代码时却责备我们。虽然检查错误并修复它们可能是一项有用的学术活动,但也许AS可以为我们这些爱好者生成新的干净代码...