gpt4 book ai didi

Android 从后台线程更新当前 Activity

转载 作者:行者123 更新时间:2023-11-30 04:06:11 25 4
gpt4 key购买 nike

我的应用程序在主 Activity 上有一个刷新按钮。当用户按下该按钮时,将创建一个新线程,该线程开始更新 SQLite 数据库。当这个线程启动时,用户可能会进入应用程序的另一个 Activity 。

问题是这些其他 Activity (ListActivity)应该在后台线程完成时根据数据库进行更新。我怎么能提供那个。我尝试使用 ActivityManager 获取当前任务,但它需要我不想要的额外权限。

最佳答案

编辑:

抱歉,我误会了你。请看下面的代码,它与 Chinaski 的类似(您只需使用回调方法的接口(interface))但我添加了一些内容以确保您知道如何以避免内存泄漏的方式使用它。

请注意 Activity 在 onDestroy 期间如何分离 - 或者您可以使用 Wea​​kReference,但是现在您将使用带有 setRetainInstance(true) 的 fragment 并完全避免分离/附加作为 fragment 将被保留。

MyAsyncTask

public class MyAsyncTask extends AsyncTask<Void, Void, Void> {

private Callback mCallback;

private boolean mIsComplete = false;

private boolean mHasCallbackBeenCalled = false;

public MyBackgroundTask(Callback callback) {
mCallback = callback;
}

/** Only safe to call this from the UI thread */
public void attach(Callback callback) {
mCallback = callback;

if (mIsComplete && !mHasCallbackBeenCalled) {
fireCallback();
}
}

/** Only safe to call this from the UI thread */
public void detach() {
mCallback = callback;
}

@Override
public void doInBackground() {
// do the heavy stuff here
return null;
}

@Override
public void onPostExecute(Void result) {
mIsComplete = true;
fireCallback();
}

private void fireCallback() {
if (mCallback != null) {
mCallback.callbackMethod();
mHasCallbackBeenCalled = true;
}
}

public static interface Callback {

public void callbackMethod();

}
}

我的 Activity

public class MyActivity extends Activity implements MyAsyncTask.Callback {

private MyAsyncTask mTask;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Check for a retained task after a configuration change
// e.g. a rotation
if (getLastNonConfigurationInstance() != null) {
mTask = (MyAsyncTask) getLastNonConfigurationInstance();
// Re-attach the task
mTask.attach(this);
}
}

@Override
public void onDestroy() {
// Detach from task to avoid memory leak
if (mTask != null) {
mTask.detach();
}

super.onDestroy();
}

@Override
public Object onRetainNonConfigurationInstance() {
// Retain the async task duration a rotation
return mTask;
}

/** Callback method */
@Override
public void callbackMethod() {
// Do something here
}

}

关于Android 从后台线程更新当前 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616288/

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