java代码:
package com.sxt.day04_05;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import com.sxt.day04_05.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
String mUsers;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("main","onCreate()");
if(savedInstanceState==null){// 若是第一次创建MainActivity
//从服务端下载users.json文件
downloadUsers();
}else{
mUsers=savedInstanceState.getString("users");
Log.i("main",mUsers);
}
}
//从服务端下载users.json文件
private void downloadUsers() {
new Thread(){//sdk从4.0开始要求下载数据必须在工作线程中执行
public void run() {
InputStream in =null;
try {
URL url=new URL("http://10.0.2.2/users.json");
URLConnection conn = url.openConnection();
in = conn.getInputStream();
byte[] buffer=new byte[1024];
int len = in.read(buffer);
mUsers=new String(buffer, 0, len);
Log.i("main",mUsers);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
}.start();
}
@Override
protected void onStart() {
super.onStart();
Log.i("main","onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.i("main","onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.i("main", "onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.i("main","onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("main","onDestroy()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("main","onRestatr()");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i("main","onSaveInstanceState()");
outState.putString("users", mUsers);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i("main","onRestoreInstanceState()");
}
}
相关推荐
本教程“037集-Activity纵横屏切换的数据保存与恢复”深入探讨了如何在屏幕旋转时妥善处理数据保存与恢复的问题,以确保用户体验的连贯性。 首先,我们来了解Activity的生命周期。在Android中,Activity有多个状态...
开发者需要理解Android的生命周期管理,特别是在屏幕切换时,确保Activity或Fragment的正确启动和销毁。 为了优化用户体验,我们还需要考虑一些额外的点,如使用动画平滑过渡,处理配置更改(如屏幕旋转)导致的...
总之,避免Fragment在切换时重新实例化并保存其状态是Android开发中的常见挑战。通过巧妙地使用生命周期方法、ViewModel、回退栈和PagerAdapter,我们可以确保用户的交互体验不会因为界面的切换而中断,即使在系统...
如果使用了Loader来异步加载数据,那么在屏幕旋转时,LoaderManager会自动保存并恢复Loader的状态,这使得在横竖屏切换时,数据加载不会重复。 7. **注意事项** - 使用`setRetainInstance(true)`在Fragment中可以...
在Android应用开发中,提供白天和夜晚模式切换是一项常见的需求,它可以为用户提供更舒适的视觉体验。白天模式通常采用亮色调,而夜晚模式则通常切换到暗色调,减轻用户在低光照环境下的眼睛疲劳。本教程将详细介绍...
这份"Android应用源码之(横竖屏切换处理)"的资源,是一个非常适合毕业设计学习的示例,可以帮助开发者深入理解如何在Android应用中处理屏幕旋转的问题。 首先,Android系统默认支持横竖屏的自动切换,但有时为了...
本文主要探讨了在Android应用中处理屏幕旋转时的数据保存与恢复,以及如何避免不必要的屏幕切换。 首先,当屏幕从横屏切换到竖屏,或者反之,Android系统会默认销毁当前Activity并重建一个新的实例以适应新的屏幕...
在Android开发中,实现Activity之间的屏幕左右滑动切换效果是一种常见的需求,这能为用户提供更加流畅和直观的交互体验。这种效果通常是通过使用Fragment或ViewPager等组件来实现的。以下将详细讲解如何在Android V...
在Tab切换时,数据保存的关键在于重写`getItem()`和`instantiateItem()`方法,确保Fragment实例被正确恢复,同时在`onSaveInstanceState()`中保存关键数据。 四、TabLayout与PagerTabStrip 在Android Design ...
在屏幕旋转时,如果Activity中的数据需要保留,应该在`onSaveInstanceState(Bundle outState)`方法中保存关键数据,并在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle ...
1. **捕获屏幕内容**:Android提供了一个叫做`SurfaceComposerClient`的类,开发者可以通过这个类获取到屏幕的BufferQueue,进而捕获屏幕每一帧的图像数据。另外,`MediaProjection` API是Android 5.0(Lollipop)...
4. **保存和恢复状态**:在横竖屏切换时,为了防止数据丢失,开发者需要使用onSaveInstanceState()和onRestoreInstanceState()方法来保存和恢复Activity的状态。 5. **禁止横竖屏切换**:如果不想让用户在应用中...
总结来说,实现“Android中屏幕触摸轨迹的绘制、保存与播放”涉及的关键技术包括`Canvas`绘图、`MotionEvent`处理、数据序列化与反序列化、文件操作以及可能的图形优化。通过理解并掌握这些知识点,开发者可以创建出...
在处理List数据时,由于SharedPreferences不直接支持List类型的存储,我们需要将其转换为可存储的格式。常见的方法有两种: 1. **序列化**:将List转换为JSON字符串。Android系统提供了`org.json`库,我们可以使用`...
在Android系统中,framebuffer(帧缓冲)是操作系统用于存储屏幕图像数据的内存区域,它直接与硬件交互,负责将像素数据渲染到屏幕上。在Android 4.0(Ice Cream Sandwich)版本中,开发者可以通过访问framebuffer来...
ThemeDemo日夜间模式切换,页面切换的时候附带动画特效, 关于多主题实现的,大牛这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中AppCompatViewInflater中的createView 方法.实现了对 xml 控件的控制. ...
在Android应用开发中,实现类似...综上所述,实现"Android仿美团城市切换,高德定位"功能涉及到Android UI设计、数据管理、网络通信、地图API集成等多个方面,开发者需要具备扎实的Android基础和对第三方库的熟练运用。
Fragment可以在Activity中动态添加、删除或替换,这在设计适应不同屏幕尺寸和配置的应用时非常有用。当我们想要增强用户体验,使界面变化更加平滑和吸引人时,可以使用Fragment切换动画。本篇文章将深入探讨Android...
在本教程中,我们将深入探讨如何在Android应用中使用Fragment实现多个页面的切换。 首先,了解Fragment的基本概念。Fragment是Activity的一部分,有自己的生命周期,可以在Activity中添加、移除或替换。它们有自己...