安卓保护现场实例

在安卓的开发过程中,经常需要对之前的数据进行保存。这个时候就需要进行保护现场的操作,该操作主要是重写了onSaveInstanceState和onRestoreInstanceState两个函数。

onSaveInstanceState,保存数据

活动生命周期的执行顺序:
onPause-onSaveInstanceState-onStop-onDestroy

onRestoreInstanceState,恢复数据

活动生命周期的执行顺序:
onStart-onRestoreInstanceState-onResume

下面这个例子就以手机横竖屏为例,保护了背景颜色这一数据。

package com.example.hjw.androidday0602;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity {
    private LinearLayout linearLayout;
    private Button button;
    String r,g,b,c;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        linearLayout = (LinearLayout)findViewById(R.id.l1);
        button = (Button)findViewById(R.id.b1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Random random = new Random();
                r = Integer.toHexString(random.nextInt(256)).toUpperCase();
                g = Integer.toHexString(random.nextInt(256)).toUpperCase();
                b = Integer.toHexString(random.nextInt(256)).toUpperCase();

                r = r.length()==1 ? "0" + r : r ;
                g = g.length()==1 ? "0" + g : g ;
                b = b.length()==1 ? "0" + b : b ;
                c="#"+r+b+g;
                Toast.makeText(MainActivity.this,c,Toast.LENGTH_SHORT).show();
                linearLayout.setBackgroundColor(Color.parseColor(c));
            }
        });

    }
    // 保存数据
    // 参数为Bundle类型,用于存储数据
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        if (c!=null){
            outState.putString("color", c);
        }
    }
    // 恢复数据
    // 参数为Bundle类型,用于读取数据
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);

        c = savedInstanceState.getString("color");
        linearLayout.setBackgroundColor(Color.parseColor(c));
    }

    // 重新将值恢复
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Toast.makeText(MainActivity.this,c,Toast.LENGTH_SHORT).show();

    }
}

前台代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/l1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.hjw.androidday0602.MainActivity">

    <Button
        android:id="@+id/b1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转"/>
</LinearLayout>

运行效果:

时间: 2024-10-06 13:39:05

安卓保护现场实例的相关文章

安卓倒计时实例

安卓实现倒计时,下面的例子是10秒的倒计时 public class PowerOff extends Activity { TextView textView; CountDownTimer timer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindo

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

安卓开发必须收藏的网站

Bookmarks 干货链接 Android源码下载 cleopard的资源 - 下载频道 - CSDN.NET 2014年下载频道人气资源大集合,免积分!-CSDN论坛-CSDN.NET-中国最大的IT技术社区 新鲜干货来了 2015年1.2.3.4.5月最热下载资源大集合-CSDN论坛-CSDN.NET-中国最大的IT技术社区 新鲜干货来袭 2015年5月最热资源大集合-CSDN论坛-CSDN.NET-中国最大的IT技术社区 2015年6月下载频道最热资源汇总-CSDN论坛-CSDN.NET

安卓 SQLite数据库操作实例

前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tc

在安卓开发中使用SQLite数据库操作实例

前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tc

安卓linux uevent内核上报机制实例

uevent可以实现内核通知上层的一种机制,最常见的电池状态的变化就是kernel uevent通知的,每次百分比或者其他的变化通过power_supply_changed通知上层update: 每个device下面都有kobj,找到device就可以通过kobject_uevent_env 通知android了: 以拔出T卡为例,内核通知上层.这里的T卡是一种sdio设备,普通TF卡是块设备,安卓通过块设备可以知道T卡的移除. kernel: Index: kernel/drivers/mmc

安卓开发中SQLite的使用(附实例)

在Android平台上系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取.下面以我自己创建的收入信息表(InAccount)为例,来学习SQLite的使用. 主要是四个步骤: 1.创建数据库类,继承SQLiteOpenHelper.程序调用的包会自动导入. public class DBOPenHelper extends SQLiteOpenHelper { /** 数据库版本号 */ private static final int VERSION = 1;

推荐安卓开发神器(里面有各种UI特效和实例)

网上有很多开源的安卓类库很好用,对于刚学习安卓的童鞋亦或者老鸟都是很好的学习对象. 我平时有关注开源代码的习惯,这么多年也搜集了不少精彩的源码. 到后来发现自己手机里装的都是几百个demo app,删又不舍得删,不删又占资源, 于是就准备搞了个23code应用,里面汇集了我精心整理的应用, 此后每周应该都会更新.敬请期待... 百度下载 更多源码访问官网www.23code.com ,网站尽量每天都更新. 有童鞋不懂什么意思, 1.如果手机装的开源应用多得话,就记不得哪个是哪个了,这个直接软件内

安卓MP3播放器开发实例(1)之音乐列表界面

学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正规.这个项目是当时借鉴Mars老师的初学视频做的安州手机的MP3播放器.自己又进行了改进,特别在歌词的优化和加入进度条方面的.因为是8个月前做的,水平非常0基础,bug应该非常多,如今自己又懒得再一次改进,仅仅希望可以给初学的朋友们提供一些帮助.或者起到抛砖引玉的效果.那我就心惬意足了. 先整体介绍