android学习笔记(二)
来源:互联网 发布:12315可以投诉淘宝官方 编辑:程序博客网 时间:2024/06/05 15:22
Activity的启动模式
标准模式
在java中
textView.setText(String.format("TaskID:%d,%s",getTaskId(),toString())); findViewById(R.id.btn_self).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,MainActivity.class)); } });
在xml中
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textview" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_self" android:text="启动自己" />
当多次点击启动自己的时候,taskID是不会变的,但是ActivityID是会发生变化的。因为task表示任务栈,栈是先进先出的,程序运行在同一个栈中。当按后退键的时候,就可以重现之前的页面了,这种机制便是使用堆栈实现的。
singeTop
在manifest的activity中设置
android:launchMode="singleTop"
其他代码和上面一样不变,你会发现taskID和ActivityID没有发生变化。含义:singleTop的作用是如果你有一个Activity在栈顶的话就不会重新创建实例,如果不在还是要创建实例。这是一个网上的例子:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。
singleTask
如果存在singleTask的实例,那么当调用singleTask的时候就会适合的销毁singleTask之上的其他所有实例。
singleInstance
每个任务栈只放一个实例。
通过浏览器链接启动本地Activity
manifest的配置文件:
<activity android:name=".Main2Activity"> <intent-filter> <category android:name="android.intent.category.BROWSABLE"></category> <category android:name="android.intent.category.DEFAULT"></category> <action android:name="android.intent.action.VIEW"></action> <data android:scheme="app"></data> </intent-filter> </activity>
PS:category用于隐式启动Intent的时候提供一些额外的信息。
HTML文件:
<a href="app://hello">跳转</a>
然后在模拟器上启动app,在浏览器中设置10.0.2.2(这个是安卓模拟器的调试地址),以及此时在html调试中的端口号和文件路径。比如:10.0.2.2:8020/test/index.html进入后就是html的页面,通过设置的链接就可以启动Activity了。
Context的理解和使用
作用:访问全局信息的接口:字符串资源之类的资源。比如Activity和Service。先来一个简单的实例代码,体会一下:
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //我们TextView中需要参数是context,而MainActivity是继承子context的 tv = new TextView(MainActivity.this); tv.setText("Hello World"); setContentView(tv);
这样新打开的页面就是Hello World了。
PS:在实际的安卓开发的过程中,我们通常不会直接在逻辑里面输入数据,比如上面的setText。通常是逻辑和数据分离,在android中所有的数据都会在string.xml中生成,所以需要建立的数据也最好在那里设置。
<string name="app_name">text</string>
tv.setText(R.string.app_name);`
之后在代码中引用即可:
Application
作用:多个组件之间进行数据的共享。而context可以作为数据共享的桥梁。而Application是一个全局的上下文对象。
Application实现多个程序共享数据
新建一个App继承Application类
public class app extends Application { private String textData = "default"; public void setTextData(String textData){ this.textData = textData; } public String getTextData(){ return textData; }}
新建一个Main2继承Activty
public class Main2 extends Activity { private TextView textView_save; private EditText editText_save; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); textView_save = (TextView) findViewById(R.id.textView_save); editText_save = (EditText) findViewById(R.id.editText_save); textView_save.setText("共享的数据是:"+ getApp().getTextData()); findViewById(R.id.button_save).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { ((app)getApplicationContext()).setTextData(editText_save.getText().toString()); textView_save.setText("共享的数据是:"+ editText_save.getText().toString()); } }); } public app getApp(){ return (app) getApplicationContext(); }}
修改本来的MainActivity
public class MainActivity extends AppCompatActivity { private TextView textView_save; private EditText editText_save; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); textView_save = (TextView) findViewById(R.id.textView_save); editText_save = (EditText) findViewById(R.id.editText_save); textView_save.setText("共享的数据是:"+ getApp().getTextData()); findViewById(R.id.button_save).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { ((app)getApplicationContext()).setTextData(editText_save.getText().toString()); textView_save.setText("共享的数据是:"+ editText_save.getText().toString()); } }); } public app getApp(){ return (app) getApplicationContext(); }}
修改Manifast
<application android:name=".app" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="main1"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Main2" android:label="main2"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
添加两个xml,两个Manifast是一样的,命名为main1和main2
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView_save" android:text="New Text" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText_save" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button_save" android:text="保存" />
代码结束,当我们在模拟器上运行程序的时候,会出现main1和main2两个程序,而且修改任何一个程序在退出后,运行任何一个程序得到的结果都是一样的。
阅读全文
0 0
- Android学习笔记(二)
- Android学习笔记(二)
- android学习笔记(二)
- android学习笔记(二)
- android 学习笔记(二)
- Android学习笔记(二)
- android学习笔记(二)
- Android学习笔记(二)
- android学习笔记(二)
- Android学习笔记(二)
- Android学习笔记(二)
- android学习笔记(二)
- Android学习笔记(二)
- Android:学习笔记(二)
- Android学习笔记(二)
- android学习笔记(二)
- Android学习笔记(二)
- Android学习笔记(二)
- Android控件篇 Button(二)
- Android Studio下JNI编程(引入外部或AS自行编译so文件)
- 一文理解深度学习,卷积神经网络,循环神经网络的脉络和原理3-残差神经网络
- 数据库事务操作
- ucos 获取查找最高优先级任务算法
- android学习笔记(二)
- 汉诺塔问题
- C++的STL之stack
- 【性能测试-jmeter】使用jmeter做dubbo服务线程同步并发测试(多图)
- Fiddler使用界面简介、简单的抓包分析(一)
- [一]2017年9月27日 首次开通CSDN博客
- Android面试题二
- FastDFS上传文件一 : 单文件上传
- QThread::currentThreadId()