gpt4 book ai didi

java - 如何在 Android 应用程序中全局访问另一个类的 Activity?

转载 作者:行者123 更新时间:2023-12-01 15:56:20 24 4
gpt4 key购买 nike

我有一个 Android 应用程序,其中定义了 2 个 Activity 。在 MainMenu.oncreate() ,我有一个AlarmManager开始定期查询服务器数据并更新PlayBack中的按钮文本。用户界面。我可以访问 Playback通过全局引用对象还是我需要启动 AlarmManagerPlayback.oncreate()相反,我可以传递对它的引用?如果是这样,应该使用 BroadcastReceiver 来完成此操作吗?和Intent正如我在 MainMenu 中所做的那样如下所示?

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainMenu"
android:label="@string/app_name">
</activity>
<activity android:name=".Playing" android:label="@string/playing_title">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<receiver android:name=".NotificationUpdateReceiver" android:process=":remote" />
<service android:name="org.chirpradio.mobile.PlaybackService"

public class MainMenu extends Activity implements OnClickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);

View playingButton = findViewById(R.id.playing_button);
playingButton.setOnClickListener(this);

try {
Long firstTime = SystemClock.elapsedRealtime();

// create an intent that will call NotificationUpdateReceiver
Intent intent = new Intent(this, NotificationUpdateReceiver.class);

// create the event if it does not exist
PendingIntent sender = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// call the receiver every 10 seconds
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 10000, sender);

} catch (Exception e) {
Log.e("MainMenu", e.toString());
}
}
}

最佳答案

I have an Android app with 2 activities defined below.

您只有一项 Activity 。

In the MainMenu.oncreate(), I have an AlarmManager kicked off to periodically query a server for data and update the text of a button in the PlayBack UI.

为什么?您是否打算让这些警报即使在用户退出 Activity 后仍然继续?

Can I access the Playback object via a global reference or do I need to kick off the AlarmManager in the Playback.oncreate() instead so I can pass a reference to it?

都不是。

使用AlarmManager意味着您希望即使在用户退出 Activity 后仍继续定期工作。因此,很可能没有“播放对象”,因为用户可能不在您的 Activity 中。如果 Playback Activity 仍然存在,您的服务可以发送自己的广播 Intent 以供接收。 This sample project演示了为此使用有序广播,以便如果 Activity 不存在,则会引发通知

另一方面,如果您不希望在用户退出 Activity 时继续定期工作,则不要使用 AlarmManager。在 Activity 中使用 postDelayed(),使用 Runnable 通过 startService() 触发您的服务,然后通过 postDelayed( )。在这种情况下,您可以考虑使用诸如 Messenger 之类的东西,让服务让 Activity 了解正在发生的情况(如果 Activity 仍然存在)。 This sample project演示以这种方式使用 Messenger

关于java - 如何在 Android 应用程序中全局访问另一个类的 Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4981680/

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