导航:首页 > 研究方法 > android研究方法

android研究方法

发布时间:2022-11-03 07:25:55

1. 学习android开发需要哪些基础

android以java为基础的,所以前提要学好Java基础知识,比如基本类型、集合等。
android api,学习基本的Activity、service、intent等基本的知识,可以开发一些界面。
计算机网络基本知识。
Linux命令、C编程基础、Android Java编程、Google Android Linux操作系统具体操作等
安卓系统开发的方法,简单来说分成四层:
第一层,以Inventor为代表的绘图工具,是Google推出的简单开发工具,主要是针对初级玩家的玩意儿,操作起来确实容易,一个不懂程序开发的用户就可以通过拖拽搞出一个能在安卓平台上跑的应用来,有点像做PPT,但任何事情都有两面性,这种容易上手的绘图工具,无法实现业务逻辑,运行效率也比较低。
第二层,以Rexsee为代表的无线中间件,这种方法就不是玩家用的了,必须是工程师来用,但对技术门槛的要求很低,会用HTML和JS的技术员就可以方便的使用,在技术要求大幅度降低的同时,基础功能的封装也是一大亮点,这些中间件已经把所有应用需要的基础功能封装好,程序员直接使用JS去调用就可以了,不再需要吭哧吭哧从零开始写代码,比如你想调用个GPS,本来要编几千行的代码,用中间件只需一行JS代码即可搞定,难怪说做中间件的厂商都说:“用了我的东西,你的程序已经做了一大半啦!”此言不虚。
第三层,基于JAVA的JDK JDK(Java Development Kit),目前绝大部分应用都是用这种方式来开发,对程序员的要求比较高,首先要有比较好的JAVA底子,然后要对Android平台本身有很深的研究,门槛不算低。

2. 如何学习安卓开发

说的是刚刚起步学习的同学,假如开始没有任何的开发经验的话,千万不要着急,不要想着在短时间内就把一个语言学习好,因为你之前没有任何的学习经验,在这个过程中需要有耐心地学习完JAVA的基础知识,然后才开始踏上Android开发之旅。一类同学是只之前做过JAVA开发经验的,这类同学可以在Android上迅速上手,但是同样的是不可忽略Android的一些基础知识,只有把基础掌握好了,才能在后期取得大的进步。 二、Android基础知识学习 在掌握好JAVA基础知识后,接下来就是学习Android基础知识和如何查看开发文档了,在这个阶段我认为是学习最有劲头和最有收获的时候,因为从一无所知到了解是会让人有收获良多的感觉,事实上在这一阶段也是学习了很多,至少知道如何建立工程,知道一些基本的机制很常用函数的用法,这个阶段会出现很多的问题,往往一个很低级的问题都会把你难倒,而这阶段正式培养学习能力的好时机,还是那句话,凡是遇到问题第一个想的是自己去解决,自己解决不了的,用网络用谷歌,要学会使用搜索引擎,大部分的时候问题都能得到解决,因为你遇到过的问题别人早就遇到过了,假如搜索引擎也找不到好的答案,这时候可以到论坛发帖问,网上牛人很多,也可以选择到群里咨询。 三、Android开发进阶 学习完Android基础知识以后,很多同学很快就会感觉到学习停步不前,感觉自己似懂非懂,我觉得这个时候是学习最关键的时候,因为一旦你踏出这一步之后,你对Android的理解就会跟更加透彻,做起开发也会更加有信心,但是怎样跨过这一阶段,我根据自己的经验是首先是保持对自己的信心,自己找一个比较简单的项目做做或者找一些应用的源代码研究研究,然后自己山寨出来一个,这样你也会有了学习的方向,因为你在了解了基础知识以后急切需要证明一下自己到底是学到了什么东西,而开发出一个自己的简单应用,就是最大的证明了,而且在开发应用的时候,肯定会遇到很多的问题,而在独立解决bug的同时,你已经掌握了独立处理问题的能力。
希望能解决您的问题。

3. 怎样着手研究 Android 源代码

不需要全部了解,阅读你感兴趣或者与你工作相关的部分就可以了。比如:

顶层目录:
.
|– bionic (bionic库,Android的基础库)
|– bootable (bootloader, recovery等,ROM移植相关)
|– build (编译和配置所需的脚本和工具)
|– dalvik (dalvik的Java虚拟机)
|– development (开发应用程序所需的模板和工具)
|– external (由其他平台移植过来的项目,对于移植工作是非常好的参考)
|– frameworks (应用程序框架层,请仔细阅读此部分代码,对于开发App会有很大帮助)
|– hardware (与硬件相关的库,驱动开发相关)
|– kernel (linux内核)
|– out (编译后生成的目录,包含构建文件系统所需的文件)
|– packages (Android的原生应用程序,App开发者需要重点关注)
|– prebuilt (Android在各平台下编译的预置脚本)
|– system (Android的底层库)
`– vendor / device (设备相关的代码,AOSP里不会有太多涉及,但是CM中却是重点)

external目录:
.
|– aes (ASE加密)
|– apache-http (网页服务器)
|– bison (自动生成语法分析器,将无关文法转换为C,C++)
|– bluez (Linux下的蓝牙工具)
|– bsdiff (diff工具)
|– bzip2 (压缩工具)
|– clearsilver (html模板系统)
|– dbus (低延时,低开销,高可用性的IPC机制)
|– dhcpcd (DHCP服务)
|– dosfstools (DOS文件系统工具)
|– dropbear (SSH2的服务器/客户端)
|– e2fsprogs (EXT2文件系统工具)
|– elf (ELF复制工具)
|– elfutils (ELF工具)
|– embunit
|– emma (Java代码覆盖率统计工具)
|– esd (将多种音频流混合在一个设备上播放)
|– expat
|– fdlibm
|– freetype (字体)
|– gdata (google的无线数据)
|– genext2fs
|– giflib (gif库)
|– googleclient (google用户库)
|– grub
|– icu4c
|– iptables (防火墙)
|– jdiff
|– jhead (jpeg头部信息工具)
|– jpeg (jpeg库)
|– libffi
|– libpcap (网络数据包捕获函数)
|– libpng (png库)
|– libxml2 (xml解析库)
|– netperf (网络性能测试工具)
|– opencore (多媒体框架,最让人诟病的模块,Andoird 4.0中已被 stagefright 取代)
|– openssl (SSL模块,需要注意的是一定要静态编译此模块,否则会出现兼容问题)
|– qemu (Android 模拟器,Android 4.0之前只支持 arm-eabi,现在已支持 arm-v7)
|– skia (SKIA图像引擎)
|– sqlite (数据库)
|– strace (调试跟踪工具)
|– tcpmp (TCP抓包软件)
|– webkit (浏览器核心)
|– wpa_supplicant (无线网卡管理)
|– yaffs2 (yaffs文件系统)

4. 怎样着手研究 Android 源代码

一般人是不具备研究全部代码的能力的,如果要研究android的源代码,不如先研究一下android开发,从开发中了解sdk,然后再看sdk的代码,一般来说不需要靠linux kernel

5. 基于android的开发主要研究什么内容

1、学习Java基矗
2、对页面布局,熟悉各种控件。
3、使用Java代码实现控件的功能。
4、优化界面效果。

6. Android采用的是什么研究方法与系统架构

您好。 抱歉给您带来疑惑。 Android X86平台是由Beyounn和Cwhuang主持设计的。项目的主要目的在于为X86平台提供一套完整的Android系统解决方案。这个项目提供了一套完整的可行源代码树,配套文档以及Live CD与Live USB。 具体信息可参考ke/view/4413912/default.aspx

7. Android常见知识点

跳槽无非就是钱少了或不爽了,无论怎么样,记住:
不要裸辞!
不要裸辞!
不要裸辞!
为什么呢?
1、裸辞就没有钱拿了,还不如骑驴找马。
2、裸辞之后如果一个月内没有找到工作,那么社保就会断了,除非你自己找渠道交了。
3、裸辞之后真的会很颓废!
当初还在上班的时候就想着,裸辞了,首先花几天时间吧简历完善一下,把知识点恶补一下,然后投简历,面试,妥妥的妥妥。
结果呢?每次裸辞之后都是:
首先躺尸一个星期;
然后用了一个星期才慢吞吞的改完简历;
然后海投,没回复,修改简历;
再次海投,面试,被虐得体无完肤,怀疑人生;
再改简历,再海投,一不小心中了。

当然海投也是有个目标范围的。

如果不是裸辞,那么现在应该还是在公司上班,在完成工作之余,就会逼着自己复习知识点了,起码不会在家堕落。在家不上班就是睡觉、看电影,樯橹灰飞烟灭,所以不要裸辞。

然并卵,我依然裸辞了。请假面试真的很烦。

onPause,假如从ActivityA启动B,如果B是透明的,则不会回调A的onStop方法。

方法一:

方法二:

1、写好动画文件 R.anim.enter 、 R.anim.exit
2、调用 overridePendingTransition 设置动画

引申:如Activity设置为singleInstance,则应该怎么设置跳转动画?

1、 startService 启动方与Service并没有关联,只有当Service调用 stopSelf 或者其它组件调用 stopService 的时候服务才会终止。

2、 bindService 启动方绑定Service,并且可以通过Binder与之交互,当启动方销毁时,也会自动unbindService,当所有启动方都unbindService之后,Service也就自动销毁了。

为什么呢?官方文档是这样写的:

大概意思是 onReceive() 执行完毕之后,它所在的进程就会变成低优先级进程,极易被系统杀死。

分两种情况分析一下:
一、收到广播的时候,应用正在运行:
此时如果没有在Manifest中设置了独立进程,则 onReceive() 就直接在主进程主线程执行,这里很明显不能执行耗时操作。
二、收到广播的时候,应用没有启动:
这时候系统会启动一个进程去执行 onReceive() ,(如果Manifest中没有设置进程名,则进程名为包名),(插一句,所有进程都会创建一个Application实例),当onReceive执行完毕之后,此进程就变成低优先级了,随时有可能被系统杀死,如果你在onReceive里面启动了线程执行耗时任务,那很有可能子线程没执行完毕,进程就被杀死了,进程没了,线程自然就挂了。

那么确实要执行耗时操作呢,怎么办?
方法一:goAsync()

方法二:schele a JobService from the receiver using the JobScheler

三种实现方法
1、继承现有的组件,如TextView等,进行拓展。
2、继承ViewGroup,自定义布局。
3、继承View,在onDraw()中描绘。

onMeasure()

onLayout()

onDraw()

其它

attachToRoot 从字面理解就是是否绑定到 root 上面去了。
1、 attachToRoot=true :则返回的view为root的子view;
2、 attachToRoot=false :则返回的view是个单独的view,传入的root只是提供一些参数给view使用而已。

那么这里不传入 attachToRoot 呢?那就看root是否为空了,如果传入root不为空,则默认绑定到root,作为root的子view返回。

也就是所谓的Frame动画。指通过指定每一帧的图片和播放时间,有序的进行播放而形成动画效果。
可以通过插入器 Interpolator 控制动画的变化速度。

也就是所谓补间动画。指通过指定View的初始状态、变化时间、方式,通过一系列的算法去进行图形变换,从而形成动画效果,主要有 AlphaAnimation 、 TranslateAnimation 、 ScaleAnimation 、 RotateAnimation 四种。
注意:只是在视图层实现了动画效果,并没有真正改变View的属性。

属性动画,通过不断的改变View的属性,不断的重绘而形成动画效果。相比于视图动画,View的属性是真正改变了。
注意:Android 3.0(API 11)以上才支持。
最常用的类有 ObjectAnimator

P.S. 我不明白cancel存在的意义。
另外, DialogFragment 是没有cancel的。

ping

内存大致分为三个区:栈区、堆区、方法区。

栈区

堆区

方法区

JAVA不允许手动释放内存,只能通过垃圾回收程序不定期对那些不再被引用的对象进行回收。

那么怎么判断哪些对象需要回收?

1、引用计数法
就是给对象添加一个引用计数器,引用对象时+1,引用失效时-1。但是这种方法解决不了对象相互引用的情况。

2、可达性分析法
通过一系列“GCRoots”对象作为起点进行搜索,当GCRoots和一个对象之间没有可达路径,则认为此对象不可用,但是不可用不一定会成为可回收对象。

编写AIDL文件,定义接口。
编译生成JAVA文件。
定义进程级Service,onBind中返回Interface.Stub()。
onServiceConnected中Interface aidl = Interface.Stub.asInterface(service);

把已修复的class文件打包成dex文件,网络传输到用户手机中,利用类加载器把这些类加载到类队列的前面即可。

【未完待续】

如果公司录用我,不管是三年还是五年,首先我都会先把公司的任务做好,然后不断深入研究Android的相关技术,特别是Android源码,了解Android底层原理,以便更好的优化性能,避免一些不必要的奇葩问题,还有就是研究一些新的框架的原理,学习别人的思维。最后就是学习周边语言,比如后台,前端等等。

8. Android有什么好的技术点适合进行技术分享

这个简单的方法是使用Chrome开发工具来调试Android应用程序,你可以查看网络请求,包括API图像等,也可以用来查看和修改数据库和SharedPref /。它不仅对Android开发有用,而且对后端程序员也很有用。他们已经熟悉了Chrome的开发工具,一旦你把Stetho集成到他们身上,只要他们的手机上有可调试的应用程序,就很容易检查网络的错误请求。最酷的事情是在几分钟内集成这个库,即插即用。

  • mpsys原理 可打印服务中的重要状态的值。在一些崩溃的场景中,你不能打印服务,如果你不理解mpsys框架,你就失去了一个非常重要的线索。

  • watchdog机制监视系统服务器进程中最重要的服务是否被阻塞。如果你的手机被困了一段时间,然后重新启动,它可能是有效的。

  • 9. 怎样着手研究 Android 源代码

    一、源码里的工程需要导入所有的Android源码,不可以单独作为一个Android工程导入到Eclipse里。
    二、使用git和repo下载Android的源代码,参考如下步骤
    以下操作都是在Ubuntu10.04LTS下完成:
    1)安装git
    sudo apt-get install git-core
    2)安装curl
    sudo apt-get install git-core curl
    3)安装Repo,为了方便直接下载repo到用户根目录中。通过curl下载repo
    curl http://android.git.kernel.org/repo >~/repo
    4)给repo可执行的权限
    chmod a+x ~/repo
    5)新建一个目录,然后进入该目录。通过repo将当前Android上所有源代码下载。
    首先初始化本地,
    ~/repo init -u git://android.git.kernel.org/platform/manifest.git
    看到repo initialized in /android的提示后,则证明初始化完毕。成功后会在~/android下生成.repo文件夹
    执行
    repo sync
    则自动开始下载源代码。git支持断点续传,如果中断了下次可继续。
    单独下载内核,用这个
    git clone git://android.git.kernel.org/kernel/linux-2.6.git
    如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:
    repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
    另一种情况是,我们只需要某一个project的代码,比如kernel/common,就不需要repo了,直接用Git即可。
    git clone git://android.git.kernel.org/kernel/common.git

    10. Android中判断app何时启动和关闭的技术研究

    Android开发中不可避免的会遇到需要检查app何时进入前台,何时被用户关闭。奇怪的是,要达到这个目的并不容易。检查app第一次启动并不难,但要判断它何时重新打开和关闭就没有那么简单了。

    这篇文章将介绍一种判断app打开,重新打开和关闭的技术。

    让我们开始吧

    判断一个app打开和关闭的关键在于判断它的activities是否正在前台显示。让我们先从简单的例子开始,一个只有一个activity的app,而且不支持水平模式。这样想要判断app是打开还是关闭只需要检查activity的onStart和onStop方法即可:

    [Java] 纯文本查看 复制代码

    @Override

    protected void onStart() {

    super.onStart();

    // The Application has been opened!

    }

    @Override

    protected void onStop() {

    super.onStop();

    // The Application has been closed!

    }

    上面例子的问题在于当需要支持水平模式时该方法就失效了。当我们旋转设备时activity将会重建,onStart方法将被再次调用,这时将会错误的判断为app第二次被打开。

    为了处理设备旋转的情况,我们需要增加一个校验步骤。当activity退出时启动一个定时器,用于判断短时间内app的这个activity是否又被启动,如果没有,说明用户真的退出了这个app,如果重新启动了这个activity,说明用户还逗留在这个app中。

    这种校验方式也适用于拥有多个activities的app,因为从app的一个activity跳转到另一个activity也可以用这种校验方式来处理。

    使用这个技术我创建了一个管理类,所有的activities在可见和不可见时都会通知这个管理类。这个管理类为每个activity处理上述的校验步骤,从而避免错误的检测。它也提供了发布订阅(观察者)模式,任何对app启动和关闭感兴趣的模块都可以通过它来得到对应的通知。

    这个管理类的使用分为三个步骤:

    1)把它添加到你的工程中

    2)Activities在可见性改变的需要发送通知

    app中所有activities都要增加下面的代码,用于可见性改变时通知管理类。最好的实现方式是把这段代码加到工程的BaseActivity中。

    [Java] 纯文本查看 复制代码

    @Override

    protected void onStart() {

    super.onStart();

    AppForegroundStateManager.getInstance().onActivityVisible(this);

    }

    @Override

    protected void onStop() {

    AppForegroundStateManager.getInstance().onActivityNotVisible(this);

    super.onStop();

    }

    3)订阅app的前台可见性改变事件

    在感兴趣的模块中订阅app前台可见性改变事件,application类的onCreate函数是一个不错的地方,它可以保证每次app启动和关闭,你都能得到通知。

    public class MyApplication extends Application {

    @Override

    public void onCreate() {

    super.onCreate();

    AppForegroundStateManager.getInstance().addListener(this);

    }

    @Override

    public void onAppForegroundStateChange(AppForegroundStateManager.AppForegroundState newState) {

    if (AppForegroundStateManager.AppForegroundState.IN_FOREGROUND == newState) {

    // App just entered the foreground. Do something here!

    } else {

    // App just entered the background. Do something here!

    }

    }

    }

    进一步的思考

    有一些细节需要进一步讨论,下面讨论的几点针对具体的应用可以做微调。

    校验时间

    校验定时器检查app是否真的进入后台的时间间隔是多少合适呢?上面的代码设置为30秒,原因如下。

    当你的app在运行时,可能存在第三方的activities会覆盖全屏幕,一些常见的例子是Google应用内购买和Facebook登录注册页面。这些情况下你的app都会被迫进入后台,前台用于显示这些第三方页面。如果把这种情况当做用户离开了你的app,显然是不对的。30秒超时设置就是用来避免这种情况的。例如当用户在30秒内完成应用内购买,大部分用户都可以做得到,那么就不会当做用户突然离开app了。

    如果你的app不存在上述这种情况,我建议可以把你的校验时间设置为4秒,这样对于低配设备当屏幕旋转重新创建activity的时间间隔是合适的。

    CPU休眠

    可能存在的问题是当用户关闭app或者app仍处于前台时用户锁屏了,这时CPU可能不会等到定时器检测就休眠了。为了保证这种情况下定时器能够正常检测用户退出app,我们需要持有wakelock防止CPU休眠直到app关闭事件被确认。实践中相比使用wakelock,这种情况并不算问题。

    判断app是如何启动的

    现在我们已经知道如何检测app何时启动和关闭,但我们不知道app是如何启动的。是用户点击通知栏消息?还是点击一个链接?亦或是他们直接通过桌面图标或最近使用启动?

    跟踪启动机制

    首先我们需要知道在哪里检测app是如何启动的。基于前面一个例子我们可以打印出app何时启动,以及如何启动。

    public class MyApplication extends Application {

    public final String TAG = MyApplication.class.getSimpleName();

    public enum LaunchMechanism {

    DIRECT,

    NOTIFICATION,

    URL;

    }

    private LaunchMechanism mLaunchMechanism = LaunchMechanism.DIRECT;

    public void setLaunchMechanism(LaunchMechanism launchMechanism) {

    mLaunchMechanism = launchMechanism;

    }

    @Override

    public void onCreate() {

    super.onCreate();

    AppForegroundStateManager.getInstance().addListener(this);

    }

    @Override

    public void onAppForegroundStateChange(AppForegroundStateManager.AppForegroundState newState) {

    if (AppForegroundStateManager.AppForegroundState.IN_FOREGROUND.equals(newState)) {

    // App just entered the foreground.

    Log.i(TAG, "App Just Entered the Foreground with launch mechanism of: " + mLaunchMechanism);

    } else {

    // App just entered the background. Set our launch mode back to the default of direct.

    mLaunchMechanism = LaunchMechanism.DIRECT;

    }

    }

    }

    设置启动机制

    现在我们可以打印app何时启动的机制,但我们没有设置它。因此下一步就是在用户通过链接或者通知启动app时我们记下它。如果没有通过这两种方式设置过,说明用户是通过点击app图标启动的。

    跟踪链接点击事件

    为了跟踪用户点击链接打开app,你需要找到代码中处理链接的地方,并加入下面的代码来跟踪启动机制。要确保这些代码在activity的onStart()函数之前调用。在哪些地方加入下面的代码取决于你的app架构了。

    getApplication().setLaunchMechanism(LaunchMechanism.URL);
    1
    跟踪通知事件

    不幸的是跟踪通知点击需要更多技巧,通知显示后,点击它将会打开之前绑定好的一个PendingIntent,这里的技巧是为通知的所有PendingIntents添加一个标识表明是由通知发出的。

    例如当为通知创建PendingIntent时为每个intent添加如下代码:

    public static final String EXTRA_HANDLING_NOTIFICATION = "Notification.EXTRA_HANDLING_NOTIFICATION";

    // Put an extra so we know when an activity launches if it is a from a notification

    intent.putExtra(EXTRA_HANDLING_NOTIFICATION, true);

    到这一步我们需要做的就是在每个activity(统一在BaseActivity中添加)中检查这个标识。当识别到这个标识时说明是从通知启动的,这时可以把启动机制设置为通过通知。这一步应该在onCreate中处理,这样在app启动到前台之前就设置好了(会触发启动机制的打印)。

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    Intent intent = getIntent();

    if (intent != null && intent.getExtras() != null) {

    // Detect if the activity was launched by the user clicking on a notification

    if (intent.getExtras().getBoolean(EXTRA_HANDLING_NOTIFICATION, false)) {

    // Notify that the activity was opened by the user clicking on a notification.

    getApplication().setLaunchMechanism(LaunchMechanism.NOTIFICATION);

    }

    }

    }

    本文接近尾声了,到这里你应该已经掌握了如何检测app何时启动和关闭,以及它是如何启动的。

    阅读全文

    与android研究方法相关的资料

    热点内容
    联想电脑打开麦克风在哪里设置方法 浏览:969
    如何测量水温传感器方法 浏览:440
    桥梁钢腹板的安装方法 浏览:743
    中式棉袄制作方法图片 浏览:71
    五菱p1171故障码解决方法 浏览:866
    男士修护膏使用方法 浏览:554
    电脑图标修改方法 浏览:609
    湿气怎么用科学的方法解释 浏览:545
    910除以26的简便计算方法 浏览:813
    吹东契奇最简单的方法 浏览:712
    对肾脏有好处的食用方法 浏览:106
    电脑四线程内存设置方法 浏览:520
    数字电路通常用哪三种方法分析 浏览:27
    实训课程的教学方法是什么 浏览:533
    苯甲醇乙醚鉴别方法 浏览:90
    苹果手机微信视频声音小解决方法 浏览:708
    控制箱的连接方法 浏览:83
    用什么简单的方法可以去痘 浏览:797
    快速去除甲醛的小方法你知道几个 浏览:811
    自行车架尺寸测量方法 浏览:132