application详解

首先去详解application标签,这个标签中的属性有很多,但大部分,我们仅仅只使用几个标签,那么有哪几个标签呢?
android:allowBackup
android:icon
android:label
android:theme
android:name

android:allowBackup它表示是否允许应用程序参与备份。如果将该属性设置为false,则即使备份整个系统,也不会执行这个应用程序的备份操作。而整个系统备份能导致所有应用程序数据通过ADB来保存。 该属性必须是一个布尔值,或为true,或为false。默认值为true。看起来,我们很少去关注它,很多时候去忽视它,但是,因为它,会造成很大的漏洞。因为可以通过ADB命令来获取保存的数据。当我们有一些敏感的数据时,特别是涉及到支付等数据的时候,别人可以通过漏洞就获取到数据了。
这里收集了几个链接可以参考:
http://www.freebuf.com/articles/terminal/60778.html

**那么就需要将其设置为false,但有时候,设置为false后,会与第三方控件产生冲突(大多数第三方控件都选择默认值true),此时需要在application标签中添加
tools:replace=”android:allowBackup”就解决错误问题了**

android:icon在设置手机上的图标
android:label设置手机上的应用程序的标题
android:theme设置应用程序的风格,该设置一般情况下设置为如下:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

android:name设置我们重新定义的Application的名字,Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。如下:

在ApplicationManifest.xml文件中配置自定义的Application
<application
        android:name="CustomApplication">
</application>
public class App extends Application{

    private static Context mContext;

    public static Context getContext() {
        return mContext;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        this.mContext = getApplicationContext();
    }
}

这样就定义了自己的Application,Application不仅仅是获取Context,在我们在启动Activity之前就获取到了数据库或者文件中的数据,这个时候,就需要在Application去获取数据,并供Activity调用。

这几个标签是我们经常要用到的。下面的地址有其他相关标签的解释。
http://blog.csdn.net/small_love/article/details/6534956

接下来做一些Application中的应用

Application数据传递
  一般保存全局数据,同时可以当做数据传递的中间键。Activity与Activity数据传递,传一些Bundle,字符串,需要传对象的时候,需要将对象序列化,现在就可以将一些数据放入Application中,Application中维持一个HashMap,在下一个页面需要时,根据key值取出Value值。
  然一个我写的例子。

public class App extends Application{

    private static HashMap<String,Object> storageData;

    @Override
    public void onCreate() {
        super.onCreate();


        storageData = new HashMap<>();
    }

    /**
     * 存储数据
     * @param key
     * @param value
     */
    public static void putStorageData(String key,Object value){
        storageData.put(key,value);
    }

    /**
     * 取出数据
     * @param key
     * @return
     */
    public static Object getStorageData(String key){
        return storageData.get(key);
    }

    /**
     * 移除数据
     * @param key
     */
    public static void removeStorageData(String key){
        storageData.remove(key);
    }
}

有两个Activity,ActivityA和ActivityB,activity有一个按钮,点击跳转到ActivityB,这个时候,我们将要传递的数据放入Application的storageData中,并将key值传递到ActivityB中,activityB进行获取显示。

public class AMainActivity extends AppCompatActivity{

    private Button nextBT;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        nextBT = (Button) findViewById(R.id.next_bt);
        nextBT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                App.putStorageData("key","success");
                Intent intent = new Intent(AMainActivity.this,BMainActivity.class);
                intent.putExtra("message","key");
                startActivity(intent);
            }
        });
    }
}
public class BMainActivity extends AppCompatActivity{

    private TextView messageTV;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        String key = getIntent().getStringExtra("message");

        messageTV = (TextView) findViewById(R.id.message_tv);
        String message = (String) App.getStorageData(key);
        messageTV.setText(message);
        App.removeStorageData(key);//移除数据
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值