Передача данных между активностями android. Коммуникация между Activity и Service. Передача данных между активностями

По мере того, как приближается событие деления награды за добычу блоков, многие люди в биткоин сфере волнуются из-за потенциальной возможности увеличения цены криптовалюты.

Один майнер, выразил серьезную обеспокоенность тем, что, когда происходит падение сумм дохода за блоки, это может послужить толчком для череды событий, которые могут привести к неизбежному хардфорку.

Является основателем Bitbank - компании, основанной на цифровой валюте в Китае, которая возглавляет топ самых масштабных операций по добыче. Недавно к группе Bitbank присоединилась компания BW. В среднем, на аккаунты BW.com приходится около 10% общего hashrate (количество хешей, которые майнер находит в секунду), впечатляющее достижение, учитывая то, что его запустили два года назад.

Го сказал , что он боится, что если цена на биткоин существенно не повысится до или сразу же после того как сократится вдвое, слишком много hashrate оставит сеть из-за неприбыльного майнинга, что делает практически невозможными верификацию транзакций.

Уполовинивание Биткоина – это событие, которое происходит каждые четыре года, при котором последующий выпуск биткоина делится напополам. В то время как представил биткоин в январе 2009, за каждый блок давалось вознаграждение - 50 BTC. 28-го ноября 2012 года, практически через четыре года после первого запуска биткоин blockchain, награда снизилась наполовину – 25 BTC.

Сатоши добавил сокращение пополам для того, чтоб код мог давать новые Биткоины, так как сеть масштабируется, но также это и возможность поэтапного приближения к конечной стадии – 21 миллиону. Тем не менее, внезапное падение может шокировать майнеров, которые работают с низкой рентабельностью.

Го считает, что майнеры, которые используют менее эффективное «железо» будут вынуждены отказаться от сети, если оплата сильно снизится.

Hardfork за сложность

Майнеры зарабатывают тем, что получают больше дохода, чем они тратят на электроэнергию и связанные с этим расходы для обеспечения функционирования сети. Максимизация прибыли в добыче биткоин заключается в том, сколько аппаратных средств может затратить кто-то, чтобы решить следующий блок.

Чем больше мощность хэширования, тем больше шансов, что майнер достигнет постоянного положительного результата.

Для того, чтобы решить эту проблему, Накамото включил сложное уравнение в код: каждые 2,016 блока, которые этот код анализирует сколько мощности хэширования находится в сети, и повышает или уменьшает сложность. В течение прошлого года, она значительно возросла.

Обеспокоенность Го вызвана из-за жестко закодированного времени, с помощью которого вычисляется сложность. Если больше хэш-мощности добавить завтра, блоки могут быть добыты раньше, увеличивая таким образом прибыль для майнеров.

Го также пояснил, что, если большинство майнеров будут в автономном режиме, это позволит снизить значительное количество общей мощности майнинга, которая, в свою очередь, будет уменьшаться, когда произойдет следующее усложнение.

Это уменьшение может привести к замедлению времени транзакции и создать серьезную головную боль для людей, желающих распространять транзакции. В худшем случае, эта ситуация приведет к кризису доверия к цифровой валюте и к полной распродаже. Понижение цен на биткоин приведет к тому, что большинство майнеров отключат свое аппаратное обеспечение.

Скептицизм серьезности

Есть и другие сообщества, которые тоже обеспокоены уполовиниванием. Поскольку это событие уже произошло один раз, не разрушив при этом сеть, и они чувствуют себя достаточно комфортно направляясь с следующее событие.

Бобби Ли , генеральный директор BTCC , биткоин-биржи расположенной в Шанхае, на которую приходится третий по масштабу биткоин майнинг пул с приблизительно 16% hashrate, согласен, что будет падение мощности, однако он не верит, что это падение будет сильно значительным, как прогнозирует Чандлер Го.

«После майнинга, конечно, hashrate немного упадет возможно до 5-10%. Но не более чем на 30%», - сказал Бобби Ли. «Мы видели как это происходило и в других криптовалютах с делением блоков, так что при сокращении вдвое блока, hashrate действительно снижается. Это очень ожидаемо».

Он продолжал объяснять, это не выглядит как всякого рода экзистенциальный кризис(состояние тревоги) для Биткоина, сравнивая его с Дональдом Трапом, скандальный американским бизнесменом, который в данный момент пытается попасть на пост президента США.

«Для людей, которые не любят Трампа, они думают, что это огромный кризис. Но через несколько недель, беспокойство проходит », - пояснил он.

«Важным моментом является то, что снижение мощности не поставит под угрозу безопасность сети и не сделает ее восприимчивой к атакам. Мы также твердо верим, что предстоящее событие по сокращению награды хорошо отразится на отрасли в целом, поскольку это будет мотивировать Биткоин компании к инновациям», - сказал Валерий Вавилов, генеральный директор BitFury.

Нет проблем, если цена поднимется

Очевидно, что все это не является проблемой, если цена будет расти,
тогда майнеры смогут как и ранее получать прибыль, даже если количество биткоинов, генерируемых каждым блоком, упадет в два раза.

«Если цена не поднимется вверх, это вызовет определенные трудности», - сказал Го.

Используя традиционные экономические теории, сочетание цены на Биткоин и сложность его добычи, способствует возвращению его состояния до сокращении награды за блок.

Эмиссия биткоина ограничена 21 миллионом монет. Соответственно, определенным порогом обладает и майнинг. Выпуск коинов проходит согласно плану, который предполагает постепенное снижение вознаграждения за нахождение блока. Уполовинивание вознаграждения происходит один раз в четыре года и сказывается не только на заработке майнеров, но и на стоимости цифрового золота.

Что такое блок?

Биткоин функционирует на технологии , которая предполагает формирование блоков информации совершенных транзакциях. Новые блоки создаются перманентной фиксацией информации о новых транзакциях в сети, и содержат информацию обо всех предыдущих операциях.

Каждый блок содержит индивидуальный заголовок и имеет уникальное решение. Для его генерации майнерам, при помощи вычислительной техники, необходимо решить хэш и подобрать подпись. Майнер, которому это удалось, получает установленное сетью вознаграждение, а все новые транзакции, добавленные этим блоком, считаются подтвержденными. Информацию в подписанном блоке изменить невозможно.

Сеть биткоина устроена таким образом, чтобы в среднем за час генерировалась 6 блоков, а каждые 2016 блоков каждый биткоин клиент сравнивает скорость создания блоков со стандартными показателями требуемой скорости и устанавливает новую сложность сети.

Почему происходит уполовинивание биткоина?

Основная цель биткоина - создание альтернативного банковским системам и фиатным деньгам метода расчета. Основной же недостаток привычного метода - инфляция.

Для предотвращения инфляции в код биткоина было заложено несколько регулирующих факторов:

  • ограниченная эмиссия;
  • рост сложности;
  • уполовинивание вознаграждения за блок.

Уполовинивание (халвинг) - часть внутрисистемной регуляции, предотвращающая инфляцию и слишком быстрое создание новых блоков и монет. После каждого уполовинивания майнер, подписавший блок, будет получать вознаграждение вдвое меньше. Награда уменьшается автоматически после того, как будет добыт последний блок из лимита 210 тысяч, выделенного системой.

Какая текущая награда за блок биткоин?

За 8 лет существования первой криптовалюты награда уменьшалась уже два раза, и последнее уполовинивание состоялось в 2016 году, которое и определило, какой сейчас блок биткоина и вознаграждение за него. Решив текущий блок, майнер добывает 12,5 ВТС в качестве награды. По данным экспертов, после уполовинивания в 2016 году майнинг прекратило незначительное количество пользователей, а на их место быстро пришли новые.

Халвинг биткоина в истории и его последствия

Начиная с момента запуска в 2009 году, первоначальное вознаграждение составляло 50 ВТС. Первое уполовинивание произошло в 2012 году, после которого вознаграждение снизилось до 25 ВТС. Резких скачков курса не наблюдалось, но стоимость одного BTC постепенно поднялась с $12 до $500, а на пике роста составляла $1200.

Следующее уполовинивание состоялось летом 2016 года. После чего также стал расти, и к январю 2017 года стабильно составлял $1100, а к началу 2018 года биткоин достиг пиковой отметки в $20 000.

Дата следующего уменьшения вознаграждения за блок

Каждые 210 тысяч блоков происходит уполовинивание. Для того, чтобы добыть их, требуется 4 года. Согласно данным счетчика уполовинивания , оно ожидает нас 21 мая 2020 года, а после него вознаграждение будет составлять 6,25 ВТС вместо текущих 12,5 ВТС.

Выводы

Опираясь на статистику предыдущих уменьшений вознаграждения можно сделать вывод, что следующее уполовинивание биткоина не принесет резких скачков курса, но будут наблюдаться тенденции к постепенному возрастанию стоимости. Для компенсации утерянного вознаграждения может быть рекомендовано повышение комиссионных сборов в системе.

Здравствуйте.

Необходимо передать данные, полученные через UART в Activity. Это можно сделать, создав в Activity поток, в котором организовать цикл while (!isInterrupted()) и вычитывать данные из буфера UART. После этого, вызвав UI поток Activity - MainActivity.this.runOnUiThread(new Runnable() , выполнить необходимые действия с этой Activity. Но если из основной Activity мы вызываем другие Activity, то организованный поток не позволяет передавать данные во вновь созданные Activity. Если я правильно понимаю, то для того чтобы данные из потока можно было передать в любую Activity, поток необходимо создавать не в Activity, а в Service.

Вопрос: по UART пришли данные, в потоке (который создан в Servce) необходимо передать данные в Activity, которая сейчас является активной, как это можно сделать и так ли это вообще делается?

1 ответ

В каждой Activity создаёте Handler. В методе onResume() этого Activity делает bindService(). Там одним из параметров выступает interface ServiceConnection. Имплементите его хоть тем же Activity. Реализуете в нём метод onServiceConnected(). В этом callback-е одним из параметров приходит сам Service. Вот и вызовите у этого Service свой собственный метод setHandler(). Передайте туда тот Handler, который именно в текущем Activity. А вот приходящие данные по UART кидайте в Service на этот Handler. Кстати, Handler традиционно работает в главном потоке, поэтому не нужно будет runOnUiThread выполнять.

Последнее обновление: 03.04.2018

Для передачи данных между двумя Activity используется объект Intent . Через его метод putExtra() можно добавить ключ и связанное с ним значение.

Например, передача из текущей activity в SecondActivity строки "Hello World" с ключом "hello":

// создание объекта Intent для запуска SecondActivity Intent intent = new Intent(this, SecondActivity.class); // передача объекта с ключом "hello" и значением "Hello World" intent.putExtra("hello", "Hello World"); // запуск SecondActivity startActivity(intent);

Для передачи данных применяется метод putExtra() , который в качестве значения позволяет передать данные простейших типов - String, int, float, double, long, short, byte, char, массивы этих типов, либо объект интерфейса Serializable.

Чтобы получить отправленные данные при загрузке SecondActivity, можно воспользоваться методом get() , в который передается ключ объекта:

Bundle arguments = getIntent().getExtras(); String name = arguments.get("hello").toString(); // Hello World

В зависимости от типа отправляемых данных при их получении мы можем использовать ряд методов объекта Bundle. Все они в качестве параметра принимают ключ объекта. Основные из них:

    get() : универсальный метод, который возвращает значение типа Object. Соответственно поле получения данное значение необходимо преобразовать к нужному типу

    getString() : возвращает объект типа String

    getInt() : возвращает значение типа int

    getByte() : возвращает значение типа byte

    getChar() : возвращает значение типа char

    getShort() : возвращает значение типа short

    getLong() : возвращает значение типа long

    getFloat() : возвращает значение типа float

    getDouble() : возвращает значение типа double

    getBoolean() : возвращает значение типа boolean

    getCharArray() : возвращает массив объектов char

    getIntArray() : возвращает массив объектов int

    getFloatArray() : возвращает массив объектов float

    getSerializable() : возвращает объект интерфейса Serializable

Пусть у нас в проекте будет определено две activity: MainActivity и SecondActivity.

В коде SecondActivity определим получение данных:

Package com.example.eugene.serializeapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setTextSize(20); textView.setPadding(16, 16, 16, 16); Bundle arguments = getIntent().getExtras(); if(arguments!=null){ String name = arguments.get("name").toString(); String company = arguments.getString("company"); int price = arguments.getInt("price"); textView.setText("Name: " + name + "\nCompany: " + company + "\nPrice: " + price); } setContentView(textView); } }

В данном случае в SecondActivity получаем все данных из объекта Bundle и выводим их в текстовое поле TextView. Предполагается, что данной activity будут передаваться три элемента - две строки с ключами name и company и число с ключом price.

Теперь определим передачу в SecondActivity данных. Например, определим для MainActivity следующий интерфейс в файле activity_main.xml :

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: