java如何写安卓application_【Android个人理解(四)】自定义Application类的使用

1、为什么要重写Application类

如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。

那么为什么这样的全局变量就不符合Android的框架架构?

众说纷纭,我理解的是static访问是无法跨进程的。Android中的Activity,Service是可以在各自进程中运行的,用static传递参数到不同进程的Activity、Service时会错。

2、如何使用重写的Application类

Application类在源码上总述这样写道:

Base class for those who need to maintain global application state. You can

provide your own implementation by specifying its name in your

AndroidManifest.xml’s tag, which will cause that class

to be instantiated for you when the process for your application/package is

created.

翻译:当我们需要保持全局变量时,使用这个类。(上文已说明,接着是如何使用这个类)

你可以通过自己取的名字,在 AndroidManifest.xml的application标签内声明并区分这个组件。声明后这个类将会在你的应用程序或者包所在的进程创建的时候,被实例化。

也就是说,使用自定义的Application类的步骤:

1)重写Application类,比如取名MyApplication。主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。

2)修改配置文件ApplicationManifest.xml,将要运行的应用程序AppContext加进去:

android:allowBackup="true"

android:name=".app.AppContext"

3)实例化自定义的Application对象

AppContext app;

app=(AppContext)getApplication();

4)对app的变量进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要了解一下 Android 中通知的相关知识。Android 中的通知是通过 NotificationManager 来管理的,通知的显示效果是由 Notification 的实例来控制的。一般情况下,我们可以使用 NotificationCompat 来构造通知,可以兼容不同版本的 Android 系统。 接下来,我们来介绍一下如何通过自定义 Toast 实现悬浮通知效果: 1. 首先,在 AndroidManifest.xml 文件中添加权限声明: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> ``` 2. 在代码中创建自定义的 Toast ,并重其 onWindowFocusChanged() 方法,用于创建悬浮通知: ```java public class FloatingToast extends Toast { private WindowManager mWindowManager; private View mView; private WindowManager.LayoutParams mParams; public FloatingToast(Context context) { super(context); mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); mView = LayoutInflater.from(context).inflate(R.layout.floating_toast, null); mParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); mParams.gravity = Gravity.TOP | Gravity.START; } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { mWindowManager.addView(mView, mParams); } else { mWindowManager.removeView(mView); } } } ``` 3. 在布局文件 floating_toast.xml 中定义悬浮通知的样式: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/floating_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_floating_toast" android:orientation="horizontal"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_notification" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一条悬浮通知" /> </LinearLayout> ``` 4. 在 Activity 中使用自定义 Toast 实现悬浮通知: ```java FloatingToast toast = new FloatingToast(this); toast.setDuration(Toast.LENGTH_LONG); toast.setView(LayoutInflater.from(this).inflate(R.layout.floating_toast, null)); toast.show(); ``` 5. 最后,记得在 Activity 的 onDestroy() 方法中销毁自定义 Toast 对象: ```java @Override protected void onDestroy() { super.onDestroy(); if (toast != null) { toast.cancel(); } } ``` 上述代码中的布局文件和相关资源文件可以根据需要自行修改,以实现不同的悬浮通知样式。同时,需要注意的是,由于 Android 8.0 及以上版本对通知权限进行了限制,如果需要在这些系统版本上显示悬浮通知,需要申请权限并设置 targetSdkVersion 为 25 或以下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值