gpt4 book ai didi

android - 从 iOS 中的 ([self performSelectorOnMainThread]) 等非 Activity 对象访问 UI-Thread

转载 作者:行者123 更新时间:2023-11-29 14:55:20 24 4
gpt4 key购买 nike

我已经从 iOS 应用程序开发转向 android,所以我在寻找以前使用过的一些功能时遇到了一些问题。

在android中有没有像[self performSelectorOnMainThread:@selector() withObject: waitUntilDone:];这样的函数可以从任何类的实例访问,知道这个类不是继承自 Activity 类。

我发现有一个函数 runOnUiThread 可以执行此操作,但我无法使用它,因为我需要从非 Activity 对象调用它,所以有没有办法访问当前可见的 Activity 还是我应该使用其他解决方案。

最佳答案

如果您没有 Activity 对象,您可以使用处理程序。 “Handler”类可以更新 UI。句柄提供接收消息和可运行对象的方法。要使用处理程序,您必须对其进行子类化并覆盖 handleMessage() 来处理消息。要处理可运行对象,您可以使用方法 post();您的 Activity 中只需要一个处理程序实例。

您的线程可以通过方法 sendMessage(Message msg) 或 sendEmptyMessage 发布消息。

示例

  1. 处理程序示例

在此示例中,我们使用“Handler”类在后台线程中更新 ProgressBar。

使用 Activity “ProgressTestActivity”创建一个新的 Android 项目“de.vogella.android.handler”。创建以下布局“main.xml”。此布局包含 ProgressBar 并通过样式设置其外观。

将您的 Activity 更改为以下内容:

package de.vogella.android.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ProgressBar;

public class ProgressTestActivity extends Activity {
private Handler handler;
private ProgressBar progress;


/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progress = (ProgressBar) findViewById(R.id.progressBar1);
handler = new Handler();
}

public void startProgress(View view) {
// Do something long
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
progress.setProgress(value);
}
});
}
}
};
new Thread(runnable).start();
}
}

运行您的应用程序。按下按钮后,ProgressBar 将从后台线程更新。

样本来自http://www.vogella.de/articles/AndroidPerformance/article.html#concurrency_handler

关于android - 从 iOS 中的 ([self performSelectorOnMainThread]) 等非 Activity 对象访问 UI-Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8227792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com