主頁 > 移動端開發 > Android簡介(總結一下上課學的東西)

Android簡介(總結一下上課學的東西)

2021-11-15 11:27:17 移動端開發

Android簡介

1.手機作業系統

在早期的手機內部是沒有智能作業系統的,所有的軟體都是由手機生產商在設計時所定制的,因此手機在設計完成后基本是沒有擴展功能的,后期的手機為了提高手機的可擴展性,使用了專為移動設備開發的作業系統,使用者可以根據需要安裝不同型別的軟體,作業系統對于手機的硬體配置要求較高,所產生的硬體成本和作業系統成本使手機的售價明顯高于不使用作業系統的手機,
手機上的主要作業系統:Android,IOS,Windows Phone 8,黑莓,Linux,

2.Android起源

開放手機聯盟(Open Handset Alliance,OHA)由谷歌公司于2007年發起的一個全球性的聯盟組織,成立時包含34家聯盟成員,現在已經增加到82家,
2007年11月12日,谷歌發布Android SDK預覽版 ,這是第一個對外公布的Android SDK,為發布正式版收集用戶反饋,
2008年4月17日,谷歌舉辦總共1000萬美金的Android開發者競賽,獎勵最有創意的Android程式開發者:cab4me(出租車呼叫)、BioWallet(生物特征識別)和CompareEverywhere(實時商品查詢),
在這里插入圖片描述
2008年8月28日,谷歌開通Android Market,供Android手機下載需要使用的應用程式,
2008年9月23日,發布Android SDK v1.0版,這是第一個穩定的SDK版本,
2008年10月21日,谷歌公布Android平臺的源代碼,

3.Android的特征

在記憶體和行程管理方面,Android具有自己的運行時和虛擬機:
(1)Android為了保證高優先級行程運行和正在與用戶互動行程的回應速度,允許停止或終止正在運行的低優先級行程,以釋放被占用的系統資源,
(2)Android行程的優先級并不是固定的,而是根據行程是否在前臺或是否與用戶互動而不斷變化的,
(3)Android為組件定義了生命周期,并統一進行管理和控制,

在界面設計上,提供了豐富的界面控制元件:
(1)加快了用戶界面的開發速度,保證了Android平臺上的程式界面的一致性,
(2)Android將界面設計與程式邏輯分離,使用XML檔案對界面布局進行描述,有利于界面的修改和維護,

Android提供輕量級的行程間通訊機制Intent,使用跨行程組件通信和發送系統級廣播成為可能,

Android支持高效、快速的資料存盤方式:
SharedPreferences、
檔案存盤
輕量級關系資料庫SQLite

Android體系結構

1、Linux內核
2、中間件層
3、程式框架層
4、應用程式層

Linux內核:
(1)硬體和其他軟體堆層之間的一個抽象隔離層,
(2)提供安全機制,記憶體管理,行程管理,網路協議堆疊和驅動程式,
中間件層:
(1)由函式庫和Android運行時構成,
(2)Android運行時,核心庫,提供Android系統的特有函式功能和Java語言函式功能,
(3)ART虛擬機,采用預編譯技術,在應用程式安裝時把程式代碼轉換成機器語言,加快了啟動速度,并且使用應用程式的運行速度更快、電量消耗更少,系統也更加流暢,
應用程式框架層:
(1)提供Android平臺基本的管理功能和組件重用機制,
應用程式層:
(1)提供一系列的核心應用程式,
(2)包括電子郵件客戶端,瀏覽器,通訊錄和日歷等,

Android程式結構

子目錄,庫和工程檔案

(1)根目錄下包含5個子目錄src、gen、assets、bin和res,
(2)2個庫檔案android.jar、android-support-v4.jar,
(3)3個工程檔案Androidmanifest.xml、project.properties和proguard.cfg,

src目錄是源代碼目錄,所有允許用戶修改的java檔案和用戶自己添加的java檔案都保存在這個目錄中 ,
gen目錄用來保存ADT自動生成的java檔案,
assets目錄用來存放原始格式的檔案,
bin目錄保存了編譯程序中的所產生的檔案,以及最終生產的apk檔案,
res目錄是資源目錄,Android程式所有的影像、顏色、風格、主題、界面布局和字串等資源都保存在其下的幾個子目錄中,
(1)其中,drawable-hdpi、drawable-mdpi和drawable-ldpi目錄用來保存同一個程式中針對不同螢屏尺寸需要顯示的不同大小的影像檔案,
(2)layout目錄用來保存與用戶界面相關的布局檔案,
(3)values目錄保存顏色、風格、主題和字串等資源,

activity_main.xml檔案:
activity_main.xml檔案是界面布局檔案,利用XML語言描述的用戶界面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools" 
    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="edu.hrbeu.helloandroid.MainActivity" >
     
    <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/hello_world" />
  
    </RelativeLayout>

Android組件

Activity組件

Android程式的呈現層,顯示可視化的用戶界面,并接受與用戶互動所產生的界面事件,
Android應用程式可以包含一個或多個Activity,一般需要指定一個程式啟動時顯示的Activity,

Service組件

Service一般用于沒有用戶界面,但需要長時間在后臺運行的應用,
可公開Service的程式介面,供其他行程呼叫,

BroadcastReceiver

用來接收廣播訊息的組件,不包含任何用戶界面,
可以啟動Activity或者Notification通知用戶接收到重要資訊,

ContentProvider

是Android系統提供的一種標準的共享資料的機制,其他程式通過ContentProvider訪問程式的私有資料 ,
Android系統內部提供一些內置的ContentProvider,能夠為應用程式提供重要的資料資訊,

程式生命周期

在這里插入圖片描述
前臺行程是Android系統中最重要的行程,

可見行程指部分程式界面能夠被用戶看見,卻不在前臺與用戶互動,不回應界面事件的行程,
如果一個行程包含Service,且這個Service正在被用戶可見的Activity呼叫,此行程同樣被視為可見行程,

服務行程包含已啟動服務的行程,Android系統除非不能保證前臺行程或可視行程所必要的資源,否則不強行清除服務行程,

后臺行程指不包含任何已經啟動的服務,而且沒有任何用戶可見的Activity的行程,Android系統中一般存在數量較多的后臺行程,

空行程是不包含任何活躍組件的行程,

程式生命周期

行程的優先級取決于所有組件中的優先級最高的部分,
行程的優先級會根據與其他行程的依賴關系而變化,

組件生命周期

所有Android組件都具有自己的生命周期,是從組件建立到組件銷毀的整個程序,
在生命周期中,組件會在可見、不可見、活動、非活動等狀態中不斷變化,

Activity生命周期

Activity生命周期指Activity從啟動到銷毀的程序,
Activity表現為四種狀態:
(1)活動狀態,Activity在用戶界面中處于最上層,完全能被用戶看到,能夠與用戶進行互動,
(2)暫停狀態,Activity在界面上被部分遮擋,該Activity不再處于用戶界面的最上層,且不能夠與用戶進行互動,
(3)停止狀態,Activity在界面上完全不能被用戶看到,也就是說這個Activity被其他Activity全部遮擋,
(4)非活動狀態,不在以上三種狀態中的Activity則處于非活動狀態,
在這里插入圖片描述

Activity堆疊

遵循“后進先出”的規則:
在這里插入圖片描述
隨著Activity自身狀態的變化,Android系統會呼叫不同的事件回呼函式,

Activity生命周期的事件回呼函式

在這里插入圖片描述

Activity事件回呼函式的呼叫順序

在這里插入圖片描述

Activity生命周期分類

Activity的生命周期可分為全生命周期、可視生命周期和活動生命周期,
每種生命周期中包含不同的事件回呼函式,

全生命周期

全生命周期是從Activity建立到銷毀的全部程序,始于onCreate(),結束于onDestroy(),
使用者通常在onCreate()中初始化Activity所能使用的全域資源和狀態,并在onDestroy()中釋放這些資源,
在一些極端的情況下,Android系統會不呼叫onDestroy()函式,而直接終止行程,

可視生命周期

可視生命周期是Activity在界面上從可見到不可見的程序,開始于onStart(),結束于onStop(),
onStart():一般用來初始化或啟動與更新界面相關的資源,
onStop():一般用來暫停或停止一切與更新用戶界面相關的執行緒、計時器和服務,
onRestart():函式在onSart()前被呼叫,用來在Activity從不可見變為可見的程序中,進行一些特定的處理程序,
onStart()和onStop()會被多次呼叫,

活動生命周期

活動生命周期是Activity在螢屏的最上層,并能夠與用戶互動的階段,開始于onResume(),結束于onPause(),
在Activity的狀態變換程序中onResume()和onPause()經常被呼叫,因此這兩個函式中應使用更為簡單、高效的代碼,

public class MainActivity extends AppCompatActivity {
    private static String TAG="LIFECYCLE";

    //完全生命周期開始時被呼叫,初始化Activity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG,"(1)onCreate()");
    }
    //可視生命周期開始時被呼叫,對用戶界面進行必要的更改
    @Override
    public void onStart(){
        super.onStart();
        Log.i(TAG, "(2) onStart()");
    }
    //在onStart()后被呼叫,用于恢復onSaveInstanceState()保存的用戶界面資訊
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "(3) onRestoreInstanceState()");
    }
    //在活動生命周期開始時被呼叫,恢復被onPause()停止的用于界面更新的資源
    @Override
    public void onResume() {
        super.onResume();
        Log.i(TAG, "(4) onResume()");
    }
    // 在onResume()后被呼叫,保存界面資訊
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        Log.i(TAG, "(5) onSaveInstanceState()");
    }
    //在重新進入可視生命周期前被呼叫,載入界面所需要的更改資訊
    @Override
    public void onRestart() {
        super.onRestart();
        Log.i(TAG, "(6) onRestart()");
    }
    //在活動生命周期結束時被呼叫,用來保存持久的資料或釋放占用的資源
    @Override
    public void onPause() {
        super.onPause();
        Log.i(TAG, "(7) onPause()");
    }
    //在可視生命周期結束時被呼叫,一般用來保存持久的資料或釋放占用的資源
    @Override
    public void onStop() {
        super.onStop();
        Log.i(TAG, "(8) onStop()");
    }
    //在完全生命周期結束時被呼叫,釋放資源,包括執行緒、資料連接等
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "(9) onDestroy()");
    }
}

上面的程式主要通過在生命周期函式中添加“日志點”的方法進行除錯,程式的運行結果將會顯示在LogCat中
為了顯示結果易于觀察和分析,在LogCat設定過濾器LifeCycleFilter,過濾方法選擇by Log Tag,過濾關鍵字為LIFTCYCLE

全生命周期:
(1)onCreate → (2)onStart → (4)onResume →(7)onPause → (8)onStop → (9)onDestroy
可視生命周期:
(1)onCreate → (2)onStart → (4)onResume → (7)onPause → (5)onSaveInstanceState → (8)onStop → (6)onRestart → (2)onStart → (4)onResume

Android用戶界面

Android用戶界面框架

MVC模型:控制器(處理用戶輸入),視圖(顯示用戶界面和影像),模型(保存資料和代碼)
在這里插入圖片描述
Android用戶界面框架采用視圖樹(View Tree)模型
在這里插入圖片描述
View是最基本的可視單元存盤了螢屏上特定矩形區域內所顯示內容的資料結構,實作所占據區域的界面繪制、焦點變化、用戶輸入和界面事件處理等,一個重要的基類,所有在界面上的可見元素都是View的子類,ViewGroup是一種能夠承載含多個View的顯示單元,

常見的系統控制元件

TextView和EditText

首先是在xml中配置控制元件,大佬一般是手寫xml,但是對于我這種小白還是喜歡用design模式,然后再對xml代碼做適當的修改,
TextView是一種用于顯示字串的控制元件,
EditText則是用來輸入和編輯字串的控制元件,在這里插入圖片描述

<TextView
        android:id="@+id/textView"
        android:layout_width="108dp"
        android:layout_height="22dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/editTextTextPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.052"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.848"
        tools:ignore="MissingConstraints" />

    <EditText
        android:id="@+id/editTextTextPersonName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Name"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.079"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.223"
        tools:ignore="MissingConstraints" />

效果:
在這里插入圖片描述

Button和ImageButton

(1)Button是一種按鈕控制元件,用戶能夠在該控制元件上點擊,并后引發相應的事件處理函式.
(2)ImageButton用以實作能夠顯示影像功能的控制元件按鈕.

xml檔案

在這里插入圖片描述

mainactivity檔案

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //創建一個Button類按鈕
        Button button=(Button)findViewById(R.id.button);
        //創建一個ImageButton類的按鈕
        ImageButton imageButton=(ImageButton)findViewById(R.id.imageButton);
        //創建一個edittext變數通過id關聯到EditText控制元件
        EditText editText=(EditText) findViewById(R.id.editTextTextPersonName);
        //點擊確認按鈕輸出值
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String string=editText.getText().toString();
                Toast.makeText(MainActivity.this, "你的名字是"+string, Toast.LENGTH_SHORT).show();
            }
        });
        //設定監聽點擊按鈕以后更換按鈕圖片
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               imageButton.setImageResource(R.drawable.download);
            }
        });

效果

點擊前:
在這里插入圖片描述
點擊后:

在這里插入圖片描述

Checkbox和RadioButton

xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="男"
        app:layout_constraintBottom_toTopOf="@+id/checkBox2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.078"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.917" />

    <CheckBox
        android:id="@+id/checkBox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="女"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.078"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.247" />

    <RadioButton
        android:id="@+id/radioButton2"
        android:layout_width="106dp"
        android:layout_height="wrap_content"
        android:text="不喜歡" />

    <RadioButton
        android:id="@+id/radioButton"
        android:layout_width="106dp"
        android:layout_height="wrap_content"
        android:text="喜歡" />

</LinearLayout>

mainactivity檔案

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private CheckBox checkBox,checkBox2;
    private RadioButton radioButton,radioButton2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkBox=(CheckBox) findViewById(R.id.checkBox);
        checkBox2=(CheckBox) findViewById(R.id.checkBox2);
        radioButton=(RadioButton)findViewById(R.id.radioButton);
        radioButton2=(RadioButton)findViewById(R.id.radioButton2);

        checkBox.setOnClickListener(this);
        checkBox.setTag(1);
        checkBox2.setOnClickListener(this);
        checkBox2.setTag(2);

        radioButton.setOnClickListener(this);
        radioButton.setTag(3);
        radioButton2.setOnClickListener(this);
        radioButton2.setTag(4);
    }

    @Override
    public void onClick(View v) {
        int m=(Integer) v.getTag();
        switch (m){
            case 1:
                Toast.makeText(MainActivity.this, "你是男生", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(MainActivity.this, "你是女生", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(MainActivity.this, "你喜歡這個布局", Toast.LENGTH_SHORT).show();
                break;
            case 4:
                Toast.makeText(MainActivity.this, "你不喜歡這個布局", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}

效果

在這里插入圖片描述

Spinner

一種能夠從多個選項中選一選項的控制元件,使用浮動選單為用戶提供選擇,

xml檔案


    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="109dp"
        android:layout_weight="1" />

mainactivity檔案

 Spinner spinner=(Spinner)findViewById(R.id.spinner);
        List<String> list=new ArrayList<String>();
        list.add("添加");
        list.add("洗掉");
        list.add("修改");
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

效果

在這里插入圖片描述

ListView

ListView是一種用于垂直顯示的串列控制元件,如果顯示內容過多,則會出現垂直滾動條,

xml檔案

 <ListView
       android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

mainactivity檔案

 ListView listView=(ListView) findViewById(R.id.listview);
        List<String>list1=new ArrayList<String>();
        list1.add("第一項");
        list1.add("第二項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        list1.add("第三項");
        ArrayAdapter<String>adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list1);
        listView.setAdapter(adapter1);

效果

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/357153.html

標籤:其他

上一篇:Android---仿QQ空間動態九宮格圖片預覽(二)

下一篇:Android開發基礎學習

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more