您的位置:首页 > 移动开发

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设置应用程序的风格,该设置一般情况下设置为如下:

<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);//移除数据
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Applicatio