application详解
2016-08-18 00:34
441 查看
首先去详解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设置应用程序的风格,该设置一般情况下设置为如下:
android:name设置我们重新定义的Application的名字,Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。如下:
这样就定义了自己的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值。
然一个我写的例子。
有两个Activity,ActivityA和ActivityB,activity有一个按钮,点击跳转到ActivityB,这个时候,我们将要传递的数据放入Application的storageData中,并将key值传递到ActivityB中,activityB进行获取显示。
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);//移除数据 } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories