如何在让用户做任何事情之前执行某些操作?

时间:2016-08-28 08:33:21

标签: c# android xamarin xamarin.android

我需要在应用程序实际启动之前执行一些操作。

我尝试了这个但是无法到达断点:

public class MyApplication : Android.App.Application {
    public MyApplication(IntPtr javaReference, JniHandleOwnership transfer)
        : base(javaReference, transfer) { }

    public override void OnCreate() {
        base.OnCreate();
        int test = 1; //breakpoint
    }
}

我做错了吗?或者这是一些调试器问题?

4 个答案:

答案 0 :(得分:1)

在Java中,您必须将android:name文件中application标记的AndroidManifest.xml属性设置为.MyApplication。假设它在Xaramin中相似:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:name=".MyApplication"
    >

答案 1 :(得分:1)

添加自己的Android应用类的Xamarin.Android方式:

1)具体类Name

[Application(Name = "com.sushihangover.MyAndroidAppClass")]
public class MyApplication : Application
{
    public MyApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle,transfer) { }
    public override void OnCreate()
    {
        base.OnCreate();
        Log.Debug("SO", "App OnCreate");
    }
}

2)更新清单:

将此完全限定名称添加为android:name=属性:

~~~
<application android:name="com.sushihangover.MyAndroidAppClass" android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name">
</application>
~~~

答案 2 :(得分:1)

这里的关键项目是&#34;注册&#34;您的自定义应用程序类使用OnCreate属性。其次,您需要提供[Application]覆盖以确保调用自定义应用程序类的构造函数。否则,如果没有<application>属性,我们就不会在AndroidManifest.xml中注册自定义android.app.Application元素。相反,我们使用默认的<application android:label="App6" android:name="android.app.Application" android:allowBackup="true" android:icon="@drawable/icon" android:debuggable="true">代替:

[Application]

因此,如果我们使用<application android:label="App6" android:name="md50033386ba710bcf156abf7e9c48d30ef.MyApplication" android:allowBackup="true" android:icon="@drawable/icon" android:debuggable="true">属性注册,那么我们将看到使用的自定义应用程序类:

[Application] //Name is typically a good idea as well public class MyApplication : Application { public MyApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { } public override void OnCreate() { base.OnCreate(); int myInt = 1; } }

以下是一个完整的工作示例:

{{1}}

enter image description here

如果没有在上面的评论中定义名称,您将获得一个名为md5的哈希值。

我们的架构文档中的一些注释也可能对此有益:

https://developer.xamarin.com/guides/android/under_the_hood/architecture/#Application_Startup

答案 3 :(得分:-1)

这可能是调试器问题。在onCreate()中,尝试做一些你可以在活动中看到的东西,例如在TextView中设置文本。