• (四)Android中Context的理解与使用


    一、Context的作用

    Context可用于访问全局资源.

    public class MainActivity extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = new TextView(MainActivity.this);
    tv.setText("钱龙");
    tv.setText(R.string.hello_world);
    tv.setText(getResources().getText(R.string.hello_world)); //访问全局资源
    setContentView(tv);

    ImageView iv=new ImageView(this);
    iv.setImageResource(R.mipmap.ic_launcher); //访问全局资源
    setContentView(iv);

    }
    }

    二、Application的用途

    公共的布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView" />

    <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="保存"
    android:id="@+id/btnSave" />

    </LinearLayout>
    <?xml version="1.0" encoding="utf-8"?>
    AndroidManifest.xml文件:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shiyanshi.learncontext" >

    <application
    android:name=".App"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >?
    <activity
    android:name=".MainActivity"
    android:label="LearnContext" > <!--安装的应用程序的名称-->
    <intent-filter> <!--指定该activity为启动的activity-->
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity
    android:name=".Main2Aty"
    android:label="Main2">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/> <!--必须指定为MAIN才会安装两个应用程序-->
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>

    </activity>
    </application>

    </manifest>

    1.新建一个Application类,在其中设置需要被程序访问的公共资源,此处为一个字符串

    public class App extends Application {
    private String stringData="default";

    public void setStringData(String stringData) {
    this.stringData = stringData;
    }

    public String getStringData() {
    return stringData;
    }
    }
    2.然后在AndroidManifest.xml文件中设置application的name属性为新建的类
    <application
    android:name=".App">
    3.新建一个Activity,并且使该Activity也成为一个启动Activity(即在系统中安装两个启动图标),注意要在AndroidManifest.xml文件中设置Activity的属性如上面的Main2Aty的设置,
    注意过滤器中action的name必须设置为android.intent.action.MAIN且category的name必须设置为android.intent.category.LAUNCHER,只有这样系统中才会显示有两个启动图标。
    public class Main2Aty extends Activity {
    private TextView textView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_common);
    textView= (TextView) findViewById(R.id.textView);
    editText= (EditText) findViewById(R.id.editText);
    textView.setText(getApp().getStringData());
    findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    getApp().setStringData(editText.getText().toString());
    textView.setText(getApp().getStringData());
    }
    });
    }

    App getApp()
    {
    return (App) getApplicationContext();
    }
    }
    4.主Activity
    public class MainActivity extends Activity {
    private TextView textView;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_common);
    textView= (TextView) findViewById(R.id.textView);
    editText= (EditText) findViewById(R.id.editText);
    textView.setText(getApp().getStringData());
    findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    getApp().setStringData(editText.getText().toString());
    textView.setText(getApp().getStringData());
    }
    });
    }
    App getApp()
    {
    return (App) getApplicationContext();
    }
    }
    5.注意3,4中是通过getApplicationContext()来获取自己新建的Application的子类的,然后再调用其中的方法就可以访问全局资源了。

    三、Application的生命周期

    Application的重载函数,有如下几个,onCreate在Activity的onCreate之前执行,并且每一个Activity执行之前都要执行Application的onCreate,因此可以很方便的在其中设置全局初始化信息。

    onTerminate,onLowMemory,onTrimMemory一般不会被执行。

    @Override
    public void onCreate() {
    super.onCreate();
    System.out.println("App onCreate");
    }

    @Override
    public void onTerminate() {
    super.onTerminate();
    }

    @Override
    public void onLowMemory() {
    super.onLowMemory();
    }

    @Override
    public void onTrimMemory(int level) {
    super.onTrimMemory(level);
    }
  • 相关阅读:
    一文告诉你,为什么要研究JVM原理
    高并发中使用到的RateLimiter源码解析
    WEB应用服务架构的演变(扫盲)
    网上安全方面的涉及到的方面(详解)
    JDK安装
    JDKJRKSDK的区别
    本地同时安装oracle客户端与服务端的注意事项
    WMS不同货主的货如何管理
    LeetCode 101
    WMS一物一码、唯一码
  • 原文地址:https://www.cnblogs.com/ql698214/p/5098083.html
Copyright © 2020-2023  润新知