- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将以下代码从 xamarin.iOS 移植到 xamarin.android:
public HomeView() : base(nameof(HomeView), null) {
NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.WillEnterForegroundNotification, (NSNotification not) => {
if(NavigationController.TopViewController is HomeView)
ScrollToCurrentDay();
});
DispatchQueue.MainQueue.DispatchAsync(() => {
ScrollToCurrentDay();
});
}
当 View 首次加载或应用程序进入前台时,您如何调用函数?我尝试使用 BroadcastReceiver 参见 here .有没有更简单、更短的方法?
最佳答案
Call specific code on entering app foreground
正如@MilanG 所说,Activity
的 OnResume()当您的应用程序从后台进入前台时将调用该方法:
protected override void OnResume()
{
base.OnResume();
ScrollToCurrentDay();
}
正如文件所说:
When the activity enters the Started state, the system invokes this callback. The onStart() call makes the activity visible to the user, as the app prepares for the activity to enter the foreground and become interactive.
但是,当此Activity
为open by another Activity
时,Activity
的OnResume()
方法也会被调用。 .
没有任何直接的方法可以在后台或前台获取应用程序状态,您需要在 Activity 的生命周期中添加一个监听器。
解决方案 1:
您可以创建一个 BaseActivity
来反射(reflect) Activity 生命周期回调,所有其他 Activity
都必须扩展此 BaseActivity
。然后您可以跟踪您的 Activity 在其生命周期中的时间并做出相应的 react 。有关更多详细信息,您可以阅读此 document .这是一个例子:
public abstract class BaseActivity : AppCompatActivity
{
public static bool isAppWentToBg = false;
public static bool isWindowFocused = false;
public static bool isMenuOpened = false;
public static bool isBackPressed = false;
protected override void OnStart()
{
applicationWillEnterForeground();
base.OnStart();
}
private void applicationWillEnterForeground()
{
if (isAppWentToBg)
{
isAppWentToBg = false;
Toast.MakeText(ApplicationContext, "App is in foreground", ToastLength.Short).Show();
}
}
protected override void OnStop()
{
base.OnStop();
applicationdidenterbackground();
}
public void applicationdidenterbackground()
{
if (!isWindowFocused)
{
isAppWentToBg = true;
Toast.MakeText(ApplicationContext, "App is Going to Background", ToastLength.Short).Show();
}
}
//Called when the current Window of the activity gains or loses focus.
public override void OnWindowFocusChanged(bool hasFocus)
{
isWindowFocused = hasFocus;
if (isBackPressed && !hasFocus)
{
isBackPressed = false;
isWindowFocused = true;
}
base.OnWindowFocusChanged(hasFocus);
}
public override void OnBackPressed()
{
base.OnBackPressed();
if (this.GetType() == typeof(MainActivity)) {
} else {
isBackPressed = true;
}
}
}
解决方案 2:
你可以注册一个ActivityLifecycleCallbacks镜像所有的 Activity 生命周期回调,因为你使用 MvvmCross
,建议使用这个解决方案:
[Application]
public class MyApplication : Application
{
public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
{
}
public override void OnCreate()
{
base.OnCreate();
RegisterActivityLifecycleCallbacks(new AppLifecycleListener());
}
}
public class AppLifecycleListener : Java.Lang.Object, Application.IActivityLifecycleCallbacks
{
private int numStarted = 0;
...
public void OnActivityStarted(Activity activity)
{
if (numStarted == 0)
{
// app went to foreground
Toast.MakeText(Android.App.Application.Context, "App is in foreground", ToastLength.Short).Show();
}
numStarted++;
}
public void OnActivityStopped(Activity activity)
{
numStarted--;
if (numStarted == 0)
{
// app went to background
Toast.MakeText(Android.App.Application.Context, "App is Going to Background", ToastLength.Short).Show();
}
}
}
关于android - 进入应用前台调用特定代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888716/
如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 var 稍后它会正确输出。 与 ax 相同。 mov ax,
我有这个代码: for($nrt=0; $nrt"; if($sidesIndexes[$nrt]==$nrt) { echo "am I in??? ".$sidesInde
我正在阅读The Go Programming Language的8.5章,并陷入一些代码。下面的代码列表。 func main() { naturals := make(chan int)
我写了一个 MySQL 查询用于将数据导出到文本文件。 查询运行成功,但结果与我的预期不符。 我想在列之间没有间距的结果。 select sample_export_record1_2013.
在普通的 Excel 窗口中,我可以打开 VBE 并通过触摸键序列插入一个新模块:ALT+F11、ALTim 全部不使用鼠标。有没有办法打开 VBE 并导航到 本工作手册 不使用鼠标的代码区域? 最佳
我正在使用 axios 发出 http 请求。在 .then() 内部,我正在使用另一个 axios 调用。最后,我有第三个 then(),它应该在第二个 then 之后运行,但实际上并没有这样做。
我需要在 cocos2d 项目中播放视频..我的问题是:如何将 MPMoviePlayerController 放入我的 View 中,如下所示:? UIView *theView = [[CCDir
我正在学习 Angular。以下代码有效: .controller('abc', function ($scope, $http) { $http.get("/Handlers/Authenticat
目前我正在使用 WPF 学习 C#。我的主要方法是尽我所能使用 MVVM 模式,但现在我有点困惑。 在我所有 View 的应用程序中,我有一个 View 模型: private DruckviewVi
关于将 G 邮件提取到 Google 电子表格,我该如何添加 IF 以按主题驳回特定电子邮件?例如:电子邮件回复(主题中带有“RE:”)。我不希望这些电子邮件出现在我的电子表格中。 我尝试过使用 LO
我正在尝试使用 Spotify API 并进入数组。 const App = () => { const [isLoading, setIsLoading] = useState(true);
我有一个 html 模板,并且有一个条件为 --> 的代码 --> window.jQuery || document.write(""+"");
我正在开发一个 Android 应用程序,该应用程序会暴力破解从 int 创建的 MD5 和。 暴力破解部分工作正常。 (我可以sysout最终值并且它是正确的。) 我在将输出值发送到警报对话框时遇到
我正在创建一个界面,用户可以通过该界面生成多系列折线图,并控制绘制哪些数据集。 要绘制哪些数据集由复选框控制。页面加载时,默认数据集以图表形式呈现,并且 $('input:checkbox.data-
我尝试将有向无环图绘制为力布局。 但是我注意到,尽管为每个组元素灌输了进入/退出条件,弹出的节点/链接并没有从 DOM 中删除它们自己。 相反,弹出的节点/链接在力布局中卡住;这意味着没有调用进入/退
这里是新手。我不知道它是怎么发生的,但我正在处理一个程序,当我去调试并进入时,黄色箭头走到了我代码的最后并跳过了整个 block 。有快速解决方法吗? 最佳答案 按 F11,或单击工具栏上的“Step
我的 Action 栏 sherlock 中有一个列表。我想在用户点击该列表时得到。我不想知道用户何时点击某个项目,我已经知道 (onNavigationItemSelected)。 在我的 onCr
** 你好 **我如何从 ci 中的 mysql 日期获取 eurodate 来工作......无法弄清楚 - 请帮忙 想要获取日期 YY-mm- dd -> dd-mm-yy提前致谢 最佳答案 $t
我有以下脚本: #!/bin/bash ls -1 | while read d do [[ -f "$d" ]] && continue echo $d cd $d done
TL;DR - 跳转到最后一段 背景 我正在执行一些数据驱动测试,并将日志文件用作测试输出之一。它的工作原理是这样的- 读取文件夹中的第一个文件 处理第一行并转换为测试 运行测试 执行验证 1 ...
我是一名优秀的程序员,十分优秀!