我有一个活动(A)和一个服务(S),它由A启动,如下所示:
Intent i = new Intent();
i.putExtra("updateInterval", 10);
i.setClassName("com.blah", "com.blah.S");
startService(i);
Run Code Online (Sandbox Code Playgroud)
A在A中有这样的功能:
public void someInfoArrived(Info i){...}
Run Code Online (Sandbox Code Playgroud)
现在我想从S.内部调用A.someInfoArrived(i).Inntnt.putExtra没有我可以传递Object引用等的版本...请帮忙!
PS:另一种方式(新信息的轮询S)不是我需要的.我找到了关于如何做到这一点的足够信息.
我这样创建一个ProgressDialogin onCreateDialog():
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_PROGRESS_ID)
{
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage(getResources().getString(R.string.MyLabel));
dialog.setCancelable(false);
dialog.setIndeterminate(true);
return dialog;
}
}
Run Code Online (Sandbox Code Playgroud)
Android智慧(或严重缺乏它)决定缓存通过onCreateDialog()创建的每个对话框.因此,任何后续调用都会showDialog(DIALOG_PROGRESS_ID)导致使用相同的ProgressDialog实例,但动画已停止工作.
我试图重新设置不确定onPrepareDialog(),但这没有做任何事情.同样没有明显的方法来调用将重置动画的对话框实例.
protected void onPrepareDialog(int id, Dialog dialog)
{
//This doesn't do anything
if (id == DIALOG_PROGRESS_ID)
((ProgressDialog)dialog).setIndeterminate(true);
super.onPrepareDialog(id, dialog);
}
Run Code Online (Sandbox Code Playgroud)
编辑:但也许有一种方法可以获得ProgressBar本身并开始动画制作?所以在我问这个问题之后我尝试了以下内容:
@Override
protected void onPrepareDialog(int id, Dialog dialog)
{
if (id == DIALOG_PROGRESS_ID)
{
ProgressBar p = (ProgressBar) dialog.findViewById(android.R.id.progress);
if (p.getAnimation() != null)
p.startAnimation(p.getAnimation());
}
super.onPrepareDialog(id, dialog);
Run Code Online (Sandbox Code Playgroud)
} …