gpt4 book ai didi

java - Android ProgressDialog 不会旋转

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:37 30 4
gpt4 key购买 nike

这是我的第一篇 stackoverflow 帖子,所以请对我温柔一点!我确定我正在尝试做的事情是可能的,这是我已经完成(或未完成?)的事情导致了问题...我只是不确定那是什么某事 是。

我正在尝试做的事情:
在我的应用同步和处理下载的数据时显示 ProgressDialog。

问题:
ProgressDialog 显示但不旋转(这让它看起来像是已卡住),同步和处理发生,ProgressDialog 关闭,应用程序继续正常运行。

我目前正在尝试如何做到这一点:
创建一个 ProgressDialog - 在我的 Activity
进行同步 - 在我的服务中
处理数据 - 在我的服务中
关闭 ProgressDialog - 在我的 Activity 中

我尝试过的事情:
使用线程(下面的代码)使用 AsynTask(如果需要可以提供代码)使用处理程序(如果需要可以提供代码)

在花了很多时间寻找我的问题的答案后,似乎其他人也遇到了相同或相似的问题,并设法使用上述想法之一解决了它。但是,我一直无法实现这些想法中的任何一个来解决我的特定问题。这让我确定这是我做错了什么……我只是不确定是什么。

我编写并正在使用的原始代码作为我所有修复尝试的基础:
首先

public class myActivity extends ListActivity {
private ProgressDialog dialog;
private boolean mIsBound;
private myService mBoundService;
private ServiceConnection mConnection;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*if we need to login start login activity for result*/
...
}

...
/*other methods*/
...
}

然后

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode){
case ACTIVITY_LOGIN:
/*after login we know we always need to sync*/
dialog = new ProgressDialog(myActivity.this);
dialog.setMessage("Synchronising...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();

Thread doBind = new Thread(new Runnable(){public void run(){doBindService();}});
doBind.start();
break;
}
}

所以现在我假设 doBind 发生在另一个线程中,让 UI 线程除了显示 ProgressDialogue 之外无事可做......?

private boolean doBindService() {
mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mBoundService = ((myService.LocalBinder)service).getService();
while (mBoundService.isRunning()){
/*wait for service to finish before doing anything else... myMethod() is expecting the sync to have completed*/
/*I suspect this loop to be the thing causing the problem. But I'm not sure why because it is in a different thread so shouldn't interfear with the dialog?! And if that is what is causing the problem then how else can I do this?*/
}
/*get the activity to do Stuff with the downloaded data*/
myMethod();
/*finished with the service for now so unbind*/
doUnbindService();
if (dialog != null) {
dialog.dismiss();
}
}

public void onServiceDisconnected(ComponentName className) {
mBoundService = null;
}
};

boolean myReturn = bindService(new Intent(myActivity.this, myService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = myReturn;
return myReturn;
}

private void doUnbindService() {
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
}
}

如果您需要任何进一步的信息以帮助我解决此问题,请告诉我。


编辑:

这是我用来代替处理程序的代码。这会显示与以前相同的行为(微调器不旋转)。

Thread doBind = new Thread(new Runnable(){
public void run(){
doBindService();
}
});
doBind.start();

.

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
dialog.dismiss();
}
};

.

private boolean doBindService() {
mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mBoundService = ((myService.LocalBinder)service).getService();
while (mBoundService.isRunning()){
}
//...do stuff same as before...
handler.sendEmptyMessage(0);
}

public void onServiceDisconnected(ComponentName className) {
mBoundService = null;
}
};

boolean myReturn = bindService(new Intent(myActivity.this, myService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = myReturn;
return myReturn;
}

最佳答案

微调器的问题与您在新线程中创建的 ServiceConnection 有关。不幸的是,这将在您的主线程/GUI 线程上运行。

来自 API 引用:(http://developer.android.com/reference/android/content/ServiceConnection.html)

Like many callbacks from the system, the methods on this class are called from the main thread of your process.

因此,由于我不熟悉服务,所以我只能猜测当您的服务完成下载数据时的一种通信方式是广播您在 Activity 中监听的 Intent,然后停止 ProgressDialog。但当然还有其他方法。

作为旁注,您永远不应该从主线程以外的任何线程修改 gui,您正试图通过生成一个试图关闭对话框的新线程来进行修改。您应该只从主线程中关闭对话框。

关于java - Android ProgressDialog 不会旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204251/

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