Android的常见问题汇总

1. ActionBar

  • 参考 郭霖的博客
  • 显示Up按钮

    • 第一步:在onCreate方法中增加 getActionBar().setDisplayHomeAsUpEnabled(true),针对appcompat v7需采用getSupportActionBar(),否则会报空指针异常
    • 第二步:在AndroidMainfest.xml中配置父Activity
      • 参考:Google的Training的实现有效导航
      • 针对android 4.1版本以上,在activity的AndroidManifest.xml中增加android:parentActivityName
      • 针对Android 4.0或以下版本,在配置中增加<meta-data>元素
        <activity
            android:name=".DetailActivity"
            android:label="@string/title_activity_detail"
            android:parentActivityName=".MainActivity">
            <!--android 4.0 及以下 -->
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        
    • 第三步:对android.R.id.home事件的处理

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
          case android.R.id.home:
              Intent upIntent = NavUtils.getParentActivityIntent(this);
              if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                  TaskStackBuilder.create(this)
                      .addNextIntentWithParentStack(upIntent)
                      .startActivities();
              } else {
                  upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                  NavUtils.navigateUpTo(this, upIntent);
              }
              return true;
          }
      }
      
      //或者使用NavUtils的导航返回,NavUtils是v4包中的工具包
      case android.R.id.home:
          NavUtils.navigateUpFromSameTask(this);
      break;
      

2. 存储卡路径

  • 手机SD卡位置
    • 手机必须root,手机的Android版本为4.2.2
    • 数据的基本路径:storage/sdcard0/Android/data/
    • 创建应用的路径:建立app的包名->files->图片文件,如:edu.niit.training.newsclientv12/files
  • Genymotion模拟器的SD卡位置
    • 数据的基本路径:mnt/shell/emulated/0/Android/data
    • 创建应用的路径:建立app的包名->files->图片文件,如:edu.niit.training.newsclientv12/files
  • Android原生模拟器的SD卡位置
    • 与手机SD卡的位置相同

3. Activity

  • launchMode
    • 用于Activity跳转:
      • 决定是否生成新的Activity实例
      • 决定是否重用已存在的Activity实例
      • 决定是否和其它Activity实例公用一个task里
    • task的概念:一个栈结构的对象,可以管理多个Activity,启动一个应用,就创建一个与之对应的task
    • 有四种launchMode
      • standard
      • singleTop
      • singleTask
      • singleInstance
    • 配置:在AndroidManifest.xml中配置android:launchMode属性
    • standard:默认的启动模式,不管有没有已存在的实例,都生成新的实例
      standard启动模式
    • singleTop
      • 跳转时系统会先在栈结构中寻找是否有一个FirstActivity实例正位于栈顶,如果有则不再生成新的,而是直接使用。
        singleTop
      • 当从SecondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。
        singleTop-2
    • singleTask:
      • 如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
      • singleTask
    • singleInstance
      • 它启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
        singleInstance
    • 参考博客